矩形覆蓋(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 表示用三...