1043 HAOI2008 下落的圓盤

2022-05-16 05:54:50 字數 1521 閱讀 7853

time limit: 10 sec  memory limit: 162 mb

submit: 1725  solved: 743

[submit][status][discuss]

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

色線條的總長度即為所求.

第一行為1個整數n,n<=1000

接下來n行每行3個實數,ri,xi,yi,表示下落時第i個圓盤的半徑和圓心座標.

最後的周長,保留三位小數

21 0 0

1 1 0

10.472

這題讓我想到了線段覆蓋。。。

輸錯乙個double調了我一晚上

利用三角函式求出每個圓盤覆蓋先前圓盤弧度的範圍,最後統計總共覆蓋了多少弧度,計算出沒有被覆蓋的弧度大小,乘以半徑就是周長

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;89

const

int maxn=1005;10

const

double pi=acos(-1.0

);11

#define sqr(x) (x)*(x)

1213

struct

line14;

17double

r[maxn],x[maxn],y[maxn];

18 vectorl[maxn];

19 vector::iterator iter;

2021

intn;

22double

ans;

2324

bool

cmp(line a,line b)

2528

29double dist(int a,int

b)30

3334

bool conta(int a,int

b)35

3839

bool inter(int a,int

b)40

4344

void insrad(int a,int

b)45

);52 l[a].push_back((line));

53return;54

}55if(st+rad>pi)

56);

58 l[a].push_back((line));

59return;60

}61 l[a].push_back((line));62}

6364

double cal(int

x)65

79else last=max(last,iter->r);

80 t+=pi-last;

81return t*r[x];82}

8384

intmain()

85

BZOJ1043 HAOI2008 下落的圓盤

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

bzoj1043 HAOI2008 下落的圓盤

題目鏈結 有n個圓盤從天而降,後面落下的可以蓋住前面的。求最後形成的封閉區域的周長。直接模擬,求出當前圓盤與之前的所有的圓盤的交點,用極角表示,模擬結束後求出每個圓盤未被覆蓋的角度即可。include include include include include include using nam...

HAOI2008 bzoj1043 下落的圓盤

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