集訓Day3 離散化 矩形覆蓋

2021-08-07 01:14:43 字數 1246 閱讀 8657

矩形覆蓋(planting)

【問題描述】

給定在乙個平面座標系上的n(1 <= n <= 100)個矩形區域,這n個矩形可能有相互覆蓋的部分。求平面上被所有矩形覆蓋的總面積,重複部分只算一次。

【輸入格式】planting.in

第一行乙個整數n。

接下來n行,每行包含4個整數x1 y1 x2 y2,表示乙個矩形區域。矩形的左上角為(x1,y1),右下角為(x2,y2)。座標範圍為–10^8到10^8之間的整數。

【輸出格式】planting.out

輸出被矩形覆蓋的總面積。

【輸入樣例】

2 0 5 4 1

2 4 6 2

【輸出樣例】

20【解題思路】

將輸入的行和列用兩個陣列對映到1···n中去,將其離散化,利用另乙個陣列存下每一對離散的變數之間的差距

【解題反思】

【參考程式】

#include

#include

#include

using namespace std;

struct data

x[205],y[205];

bool comp(data a,data b)

sort(x+1,x+1+2

*n,comp);

sort(y+1,y+1+2

*n,comp);

for (int i=1;i<=2

*n;i++)

//離散化

for (int i=1;i<2

*n;i++)

for (int j=1;j<2

*n;j++)

c[i][j]=(x[i+1].num-x[i].num)*(

y[j+1].num-y[j].num);//每乙個離散的變數間的差距

for (int i=1;i<=n;i++)

for (int j=bx[2

*i-1];j2

*i];j++)

for (int k=by[2

*i-1];k2

*i];k++) pic[j][k]=1;//傳統的標記方法,簡單暴力

for (int i=1;i<2

*n;i++)

for (int j=1;j<2

*n;j++)

if (pic[i][j]==1) ans+=c[i][j];//統計

cout0;}

集訓Day3 離散化 矩形覆蓋

矩形覆蓋 planting 問題描述 給定在乙個平面座標系上的n 1 n 100 個矩形區域,這n個矩形可能有相互覆蓋的部分。求平面上被所有矩形覆蓋的總面積,重複部分只算一次。輸入格式 planting.in 第一行乙個整數n。接下來n行,每行包含4個整數x1 y1 x2 y2,表示乙個矩形區域。矩...

北京集訓DAY3

消去合法的序列 剩下的不合法序列一定是 3兩種括號個數各加1除2 手算一下即可4 5 include 6 include 7 include 8 9const int maxn 100010 10 11int len,top,cnt 1213 char s maxn 1415 inthh 25int...

省隊集訓DAY3

一共要使用六根木棍,那麼分割的方法就兩種,那麼關鍵就是要計算2,3的數量。cnt1 i 表示每種長度的木棍的方案數 cnt2 i 最初表示用不同的木棍拼成長度為i邊的方案數,後來表示選出四根木棍構成的方案數。cnt22 i 表示用兩個長度相同的不同木棍拼成長度為i的邊的方案數。cnt3 i 表示用三...