題目鏈結
有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...