bzoj1043 HAOI2008 下落的圓盤

2021-07-28 15:48:59 字數 1619 閱讀 2992

題目鏈結

有n個圓盤從天而降,後面落下的可以蓋住前面的。求最後形成的封閉區域的周長。

直接模擬,求出當前圓盤與之前的所有的圓盤的交點,用極角表示,模擬結束後求出每個圓盤未被覆蓋的角度即可。

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int n =

1010

;const

double pi =

acos(-

1.0)

, eps =

1e-10

;inline

intcmp

(const

double

&a)#define pf(x) ((x)*(x))

struct point

point

(double __x,

double __y):x

(__x),y

(__y)

inline

void

init()

inline

double

norm()

inline point operator-(

const point &rhs)

const};

struct node

inline

bool

operator

<

(const node &rhs)

const};

struct circle

inline

void

init()

}lib[n]

;int n;

bool iscover[n]

;inline

bool

cover

(circle up, circle &down)

else

if(x1 <

-pi)

else

//cout << down.ls.size() << endl;

return

false;}

inline

double

calc()

sort

(o.ls.

begin()

, o.ls.

end())

;int cnt =0;

double lst =

-pi, sum =0;

for(

int j =

0; j < o.ls.

size()

; j++

) sum +

= pi - lst;

rst +

= sum*o.r;

// #undef o

}return rst;

}int

main()

printf

("%.3lf\n"

,calc()

);return0;

}

BZOJ1043 HAOI2008 下落的圓盤

每個圓盤只會受到後邊的圓盤的影響 所以算一下每個圓盤和後邊的圓盤相交的圓心角,然後求個並即可 可以用餘弦定理 複雜度n 2 log n 注意特判沒有交 include include include include include include include include include in...

HAOI2008 bzoj1043 下落的圓盤

description 有n個圓盤從天而降,後面落下的可以蓋住前面的。求最後形成的封閉區域的周長。看下面這副圖,所有的紅 色線條的總長度即為所求.input 第一行為1個整數n,n 1000 接下來n行每行3個實數,ri,xi,yi,表示下落時第i個圓盤的半徑和圓心座標.output 最後的周長,保...

bzoj1043 HAOI2008 下落的圓盤

傳送門 看到資料範圍不大,暴力走起。列舉每乙個圓,如果被完全覆蓋直接退出。否則如果被覆蓋掉一部分就求出覆蓋區間。然後就是sb的區間覆蓋問題了。include include include include include include define pi acos 1 using namespac...