給定平面上若干矩形,求出被這些矩形覆蓋過至少兩次的區域的面積.
input輸入資料的第一行是乙個正整數t(1<=t<=100),代表測試資料的數量.每個測試資料的第一行是乙個正整數n(1<=n<=1000),代表矩形的數量,然後是n行資料,每一行包含四個浮點數,代表平面上的乙個矩形的左上角座標和右下角座標,矩形的上下邊和x軸平行,左右邊和y軸平行.座標的範圍從0到100000.
注意:本題的輸入資料較多,推薦使用scanf讀入資料.
output對於每組測試資料,請計算出被這些矩形覆蓋過至少兩次的區域的面積.結果保留兩位小數.
sample input
2sample output51 1 4 2
1 3 3 7
2 1.5 5 4.5
3.5 1.25 7.5 4
6 3 10 7
30 0 1 1
1 0 2 1
2 0 3 1
7.630.00
和求面積並差不多。
1#pragma warning(disable:4996)
2 #include3 #include4 #include5 #include
6 #include7 #include8 #include9
using
namespace
std;
1011
#define lson root<<1
12#define rson root<<1|1
13#define ll long long
1415
const
int maxn = 5000;16
17struct
seg
21 seg(double l, double r, double h, int
d) : l(l), r(r), h(h), d(d) {}
22bool
operator
23}line[maxn];
2425
intn, cnt[maxn];
26double
hash[maxn], one[maxn], two[maxn];
2728
void push_up(int l, int r, int
root)
35else41}
42}4344
void update(int l, int r, int l, int r, int root, int
c) 51
int mid = (l + r) >> 1;52
update(l, r, l, mid, lson, c);
53update(l, r, mid, r, rson, c);
54push_up(l, r, root);55}
5657
intmain()
5871
72 n <<= 1
;73 sort(line + 1, line + n + 1
);74 sort(hash + 1, hash + n + 1
);75
76int m = unique(hash + 1, hash + n + 1) - (hash + 1
);77
78 memset(cnt, 0, sizeof
(cnt));
79 memset(one, 0, sizeof
(one));
80 memset(two, 0, sizeof
(two));
8182
double ans = 0;83
for (int i = 1; i <= n; i++)
89 printf("
%.2lf\n
", ans);90}
91 }
hdu 1255 覆蓋的面積
與poj1151略有不同 由於是大於等於2 的有效 所以應該更新到點 include include include include include include include include include includeusing namespace std define inf 0x3f3...
HDU 1255 覆蓋的面積
題目鏈結點這裡 這道題,很久以前做過,當時寫了個暴力,居然過了,然後一直想寫下線段樹的,結果一直被各種事搞得忘了。現在終於填坑了。include include include includeusing namespace std define mem x,y memset x,y,sizeof x...
HDU 1255 覆蓋的面積
題目 給定平面上若干矩形,求出被這些矩形覆蓋過至少兩次的區域的面積.input 輸入資料的第一行是乙個正整數t 1 t 100 代表測試資料的數量.每個測試資料的第一行是乙個正整數n 1 n 1000 代表矩形的數量,然後是n行資料,每一行包含四個浮點數,代表平面上的乙個矩形的左上角座標和右下角座標...