塗色:(日文題目,自己翻譯成了中文)為了宣傳資訊競賽,要在長方形的三合板上噴油漆來製作招牌。三合板上不需要塗色的部分預先貼好了護板。被護板隔開的區域要塗上不同的顏色,比如上圖就應該塗上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...