AOJ 0531 座標離散化

2022-09-08 03:45:07 字數 1544 閱讀 5682

塗色:(日文題目,自己翻譯成了中文)為了宣傳資訊競賽,要在長方形的三合板上噴油漆來製作招牌。三合板上不需要塗色的部分預先貼好了護板。被護板隔開的區域要塗上不同的顏色,比如上圖就應該塗上5種顏色。請編寫乙個程式計算塗色數量,輸入資料中,保證看板不會被護板全部遮住,並且護板的邊一定是水平或垂直的。

輸入:第乙個數是寬w(1 ≤ w ≤ 1000000),第二個數是高h(1 ≤ h ≤ 1000000)。

第二行是護板的數量n(1 ≤ n ≤ 1000),接著n行是每個護板的左下角座標 (x1 , y1 )和右上角座標 (x2 , y2 ),用空格隔開: x1 , y1 , x2 , y2 (0 ≤ x1< x2 ≤ w, 0 ≤ y1 < y2 ≤ h 都是整數)

招牌的座標系如下,左下角是 (0, 0) ,右上角是(w, h) , 測試集中的30%都滿足w ≤ 100, h ≤ 100, n ≤ 100。

輸出:乙個整數,代表塗色數量。

輸入例

15 6

101 4 5 6

2 1 4 5

1 0 5 1

6 1 7 5

7 5 9 6

7 0 9 2

9 1 10 5

11 0 14 1

12 1 13 5

11 5 14 6

0 0

輸出例子

5

思路使用座標離散化求解,座標離散化的思想是:當座標範圍很大而座標數量很少時,可以考慮把所有用到的橫座標排序,然後用每個座標對應的下標來更新座標位置。

擋板有面積,可以壓縮到很苗條的1*n,空白部分也需要壓縮,在網上查詢到了利用imos法高效地統計方法。

#include#include#include#includeusing namespace std;

int n,h,w;

int x1[1000],x2[1000],y1[1000],y2[1000];

int fld[2002][2002],dx[4]=,dy[4]=;

int compress(int *x1,int *x2,int w)}}

} return ans;

}int main(void){

while(cin >> w >> h,w|h){

cin >> n;

for(int i=0;i> x1[i] >> y1[i] >> x2[i] >> y2[i];

fill(fld[0],fld[2002],0);

w=compress(x1,x2,w);

h=compress(y1,y2,h);

for(int i=0;i

AOJ 0531 座標離散化 bfs

題意 傳送門 aoj 0531 矩形的寬和高 1 w,h 1000000 資料範圍大,要離散化處理。對於劃分區域,bfs 即可 遞迴實現可能棧溢位 填充陣列 fld x y 代表左下角頂點座標離散表示為 x,y 的 1 1 矩形。include include include include inc...

《挑戰程式設計競賽》P164 座標離散化

問題描述 w h的格仔畫了n條或垂直或水平寬度為1的直線,求出這些格仔被劃分成了多少個4連塊 上 下 左 右連通 輸入格式 第一行包含兩個整數 w和h,表示矩陣的列數和行數 行列編號都從1開始 第二行包含乙個整數n,表示有n條直線。接下來的n行,每行包含四個整數 x1,y1,x2,y2,表示一條直線...

NC 17881 座標離散化 並查集

題意 傳送門 nc 17881 題解考慮到程式 現的變數 x1,x2,x 3 x1,x2,x3 dots x1,x2,x3 取值較大,進行座標離散化。先處理相等的變數,用並查集維護 對於不相等的變數,判斷是否位於同乙個連通分量即可。include using namespace std define...