POJ 1151 Atlantis 離散化 暴力

2022-04-06 12:33:10 字數 2218 閱讀 4918

題目鏈結

資料範圍較小,直接離散後暴力。等等學習一下線段樹的思路。

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

6#define n 101

7#define eps 1e-6

8double

xr[n],xc[n],yr[n],yc[n];

9double x[3*n],y[3*n];

10int dblcmp(double

x)11

16int

main()

1732 r = c = 0

;33 sort(x,x+2*n);

34 sort(y,y+2*n);

35for(i = 1;i < 2*n;i ++)

3641

for(i = 1;i < 2*n;i ++)

4247

for(i = 0;i < r;i ++)

4856

if(k != n) ans += (x[i+1]-x[i])*(y[j+1]-y[j]);57}

58}59 printf("

test case #%d\ntotal explored area: %.2lf\n\n

",cas++,ans);60}

61return0;

62 }

線段樹版本主要是看的以下的部落格。

後乙個部落格的圖很不錯。hh解釋很好,就是把矩形分為上邊和下邊,從下到上,掃瞄。cnt記錄區間下邊比上邊多幾條,sum記錄存在的長度。一段一段的更新,然後計算即可。

2013-06-20

1 #include 2 #include 3 #include 

4 #include 5

using

namespace

std;

6#define maxn 5000

7#define lson l , m, rt<<1

8#define rson m+1, r,rt<<1|1

9double

que[maxn];

10double

sum[maxn];

11int

cnt[maxn];

12struct

node

1317 node(double a,double b,double c,int

d):lx(a),rx(b),y(c),s(d){}

18bool

operator

< (const node &s) const

1922

}mat[maxn];

23int bin(double x,int

n)24

37return

mid;38}

39void pushup(int rt,int l,int

r)40

48void update(int l,int r,int c,int l,int r,int

rt)49

56int m = (l+r)>>1;57

if(l <=m)

58update(l,r,c,lson);

59if(r >m)

60update(l,r,c,rson);

61pushup(rt,l,r);62}

63int

main()

6479 sort(que,que+num);

80 sort(mat,mat+num);

81int k = 1;82

for(i = 1;i < num;i ++)

8387

double ans = 0

;88 memset(cnt,0,sizeof

(cnt));

89 memset(sum,0,sizeof

(sum));

90for(i = 0;i < num-1;i ++)

9198 printf("

test case #%d\ntotal explored area: %.2f\n\n

",cas++,ans);99}

100return0;

101 }

POJ1151 Atlantis 矩形切割

給出n個矩形,求這些矩形面積的並。輸入包含多組測試資料 每組資料的第一行包含乙個整數n 1 n 1000 表示矩形的個數。接下來n行,每行四個數 不一定是整數 x1,y1,x2,y2 0 x1最後一行以0作為檔案的結束。對於每組測試資料,輸出兩行 第一行是 test case k k是組數 開始為1...

離散化 蠻力 POJ 1151 Atlantis

題意 求矩形面積並 分析 本來是要學習掃瞄線的,不過還沒看懂。囧。在看了黑書之後,發現這題資料規模如此小 100個矩形 於是yy出了一種方法 1.首先把x,y座標都進行離散化。2.離散化之後,將整個平面劃分成很多面積不等的小矩形。3.列舉每個大矩形,得到大矩形離散化後的左上角點和右下角點的位置。4....

POJ1151 Atlantis 掃瞄線演算法

給出幾個矩形對角端點座標,求這些矩形整體覆蓋的面積。整個平面被每個矩形的水平邊所在直線 以後簡稱 水平線 分成了幾個部分,而整體覆蓋面積則為每相鄰的兩個水平線間夾的長度 以後簡稱 夾長 以及水平線所對應的乙個或幾個矩形水平邊 以後簡稱 水平線段 在水平線中所佔的長度之積的和。於是我們假設有乙個掃瞄線...