usaco
時間限制: 1 s
空間限制: 16000 kb
題目等級 : 大師 master
題解檢視執行結果
n(n<5000) 張矩形的海報,**和其他同樣形狀的貼在牆上。它們的邊都是垂直的或水平的。每個矩形可以部分或者全部覆蓋其他矩形。所有的矩形組成的集合的輪廓稱為周長。寫乙個程式計算周長。
圖 1 是乙個有 7 個矩形的例子:
圖 1.乙個 7 個矩形的集合
對應的輪廓為圖 2 所示的所有線段的集合:
圖 2. 矩形集合的輪廓
所有矩形的頂點座標均為整數。所有的座標都在 [-10000,10000] 的範圍內,並且任何乙個矩形面積都為整數。結果的值可能需要 32 位有符號整數表示。
輸入描述 input description
第1行: n,張貼在牆上的矩形的數目。
第 2..n+1行 接下來的n行中,每行都有兩個點的座標,分別是矩形的左下角座標和右上角座標。每乙個座標由 x 座標和 y 座標組成。
輸出描述 output description
只有一行,為乙個非負整數,表示輸入資料中所有矩形集合的輪廓長度。
樣例輸入 sample input
7樣例輸出 sample output-15 0 5 10
-5 8 20 25
15 -4 24 14
0 -6 16 4
2 15 10 22
30 10 36 20
34 0 40 16
228資料範圍及提示 data size & hint
範圍如題所述
分類標籤 tags 點此展開
usaco
/*這道題暴力竟然可以過,可能是資料比較弱,就是把矩形拆成兩條橫邊和縱邊,然後暴力給一條邊上的每乙個點加權值,
如果用線段樹的話,可能是用線段樹維護區間和吧,貌似很麻煩的樣子。
但是這個題有很多細節需要注意(掃瞄線的題大都有很多細節)。
為了使包含關係的邊只出現一次,再加入左邊時,要在區間權值為空(即以前未出現過包含這條邊的邊)時才更新答案,
另外在排序時如果位置相同,把左邊排在前面,這是為了解決兩個矩形前後重合的情況。
*/#include
#include
#include
using
namespace
std;
const
int n=1e4+10
;struct
node
}a[n*2],b[n*2
];int n,m,cnt,f[n*4
];int
main()
sort(a+1,a+cnt+1);sort(b+1,b+cnt+1
);
int ans=0
;
for(int i=1;i<=cnt;i++)
else }}
memset(f,
0,sizeof
f);
for(int i=1;i<=cnt;i++)
else }}
printf("%d
",ans);
return0;
}
矩形周長並
例題 hdu1828 題意 裸題 include using namespace std define lson rt 1 define rson rt 1 1 const int maxn 10005 const int inf 1e9 7 struct node node int x1,int ...
矩形周長並,矩形面積並,矩形面積交
目錄 矩形周長並 矩形面積並 矩形面積交 includeusing namespace std const int maxn 50004 2 struct nodesegtree maxn 2 struct lineline maxn bool cmp line a,line b void cal ...
POJ 1177 矩形周長並
參考部落格 方法 把矩形分成橫線和豎線去處理,可知是完全相同的操作,我們來講下怎麼算出橫線部分,豎線部分就是照搬即可。將橫線儲存在乙個表中,按橫線所處的豎直位置排序 公升序 另外每條橫線帶乙個標記值,原矩形的下線為1,上線為 1 對應過去就是插入線段和刪除線段 從低到高掃瞄橫線,沒掃到一條橫線就能計...