POJ 1177 Picture 矩形周長並

2022-05-28 13:00:13 字數 1438 閱讀 6644

題意: 給出 n 個矩形,可以相互覆蓋,求所有矩形合在一起的輪廓總長度。

分析:先對所有矩形按左下角的y 座標排序,讓矩形的所有點向 x 軸投影,記錄所有的投影的x值,對x 排序,分段累加x 座標差值;

① 如果 s[i].y1>up  說明兩個矩形沒有交集,即新的矩形沒有被前乙個矩形覆蓋到 ,res+=2*(right[i]-right[i-1]) 累加新的 橫邊覆蓋值。

② 如果 s[i].y2>up  說明新的矩形下邊界在該 相鄰 x 的區間被覆蓋,所以只要更新給 區間的上邊界 up=s[i].y2

然後對矩形按左下角的x 座標排序,讓矩形向y軸作投影,最後按照類似的方法求出 所有豎邊的和。

#include#include

#include

#define eps 1e-8

#define inf 0x1f1f1f

inttot,n,m,tt;

struct

node

s[10005

];double left[10005

];double right[10005

];double x[10005

];double y[10005

];int cmp1(const

void*p1,const

void*p2)

int cmp2(const

void*p1,const

void*p2)

int c***(const

void*p1,const

void*p2)

intmain()

res=0

; qsort(s,n,

sizeof(s[0

]),cmp1);

qsort(x,tot,

sizeof(x[0

]),c***);

tt=0

;

for(i=1;i)

if(x[i]!=x[i-1

])

for(i=0;i)

else

if(s[j].y2>up)

up=s[j].y2;}}

qsort(s,n,

sizeof(s[0

]),cmp2);

qsort(y,tot,

sizeof(y[0

]),c***);

tt=0

;

for(i=1;i)

if(y[i]!=y[i-1

])

for(i=0;i)

else

if(s[j].x2>up)

up=s[j].x2;}}

printf(

"%.0lf

",res);

}return0;

}

POJ 1177 Picture 矩形周長並

題意很簡單,但是周長並比面積並又稍微麻煩了一些 這時候要開乙個numseg儲存豎邊的個數。再開lbd,rbd分別表示邊界,這樣是為了幫助刪除重合的邊 id sdj22251 prog subset lang c include include include include include incl...

POJ 1177 Picture 矩形周長並

題意很簡單,但是周長並比面積並又稍微麻煩了一些 這時候要開乙個numseg儲存豎邊的個數。再開lbd,rbd分別表示邊界,這樣是為了幫助刪除重合的邊 id sdj22251 prog subset lang c include include include include include incl...

POJ 1177 Picture(線段樹 掃瞄線)

description 求n個矩形的周長並 input 第一行為一整數n表示矩形個數,之後n行每行四個整數x1,y1,x2,y2表示該矩形左下端點與右上端點的橫縱座標 output 輸出這n個矩形的周長並 sample input 7 15 0 5 10 5 8 20 25 15 4 24 14 0...