BZOJ1043 HAOI2008 下落的圓盤

2021-08-15 14:20:47 字數 1323 閱讀 1369

求紅線總長可以用每個圓的周長減去被覆蓋的部分

對每個圓i,列舉

j>

i j

>

i計算圓j覆蓋了圓i的長度

若i和j相離/相切或i包含j不考慮

若i被j包含就被完全覆蓋

否則是相交的情況如圖

圓a和圓b交與c,d,可以算出ae,ce的長度,用餘弦定理可以算得coscae,用acos,atan2可以算得a被覆蓋的乙個弧度區間,把所有覆蓋的區間求出來後就變成了乙個區間覆蓋問題

code:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using

namespace

std;

const

int maxn = 1100;

const

double pi = acos(-1);

const

double eps = 1e-9;

const

double sqr(const

double x)

int n;

struct node

a[maxn];

struct interval

double dec=acos((sqr(a[i].r)+sqr(dis)-sqr(a[j].r))/(2.0*a[i].r*dis));

double mid=atan2(a[j].y-a[i].y,a[j].x-a[i].x);

double l=mid-dec,r=mid+dec;

if(r>pi) t[++tp]=(interval),r=pi;

if(l

t[++tp]=(interval);

}if(!fl) continue;

sort(t+1,t+tp+1);

double las=-pi,sum=0;

for(int j=1;j<=tp;j++)

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 最後的周長,保...