覆蓋的面積 HDU 1255

2022-03-31 23:20:56 字數 2027 閱讀 7071

給定平面上若干矩形,求出被這些矩形覆蓋過至少兩次的區域的面積.

input輸入資料的第一行是乙個正整數t(1<=t<=100),代表測試資料的數量.每個測試資料的第一行是乙個正整數n(1<=n<=1000),代表矩形的數量,然後是n行資料,每一行包含四個浮點數,代表平面上的乙個矩形的左上角座標和右下角座標,矩形的上下邊和x軸平行,左右邊和y軸平行.座標的範圍從0到100000.

注意:本題的輸入資料較多,推薦使用scanf讀入資料.

output對於每組測試資料,請計算出被這些矩形覆蓋過至少兩次的區域的面積.結果保留兩位小數.

sample input

2

51 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

sample output

7.63

0.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行資料,每一行包含四個浮點數,代表平面上的乙個矩形的左上角座標和右下角座標...