HAOI2008 bzoj1043 下落的圓盤

2021-07-30 02:49:56 字數 1492 閱讀 7253

description

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

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

output

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

可以算是【uva1308 viva confetti】的公升級版。

這回不能o(

n3) 列舉判斷每一段小圓弧是否被覆蓋了,可以把乙個圓和在他上面的圓交出的所有圓弧找出來,找到這些弧的並集的補集就是這個圓露出的部分。求並集的時候可以轉化為序列上的問題,做法就很多了。

#include

#include

#include

#include

using

namespace

std;

const

double eps=1e-8,pi=acos(-1);

int dcmp(double x)

struct vector

vector operator + (const vector &v) const;}

vector operator - (const vector &v) const;}

vector operator * (const

int &k) const;}

vector operator / (const

int &k) const;}

};typedef vector point;

double dot(vector v,vector u)

double cross(vector v,vector u)

double length(vector v)

double dis(point p,point q)

double convert(double a)

struct circle

}a[1010];

bool in(circle c1,circle c2)

vector

double,int> > ang;

vector

double,int> >::iterator it;

void getintersection(circle c1,circle c2)

else

}double count()

return ret;

}void check()

int n;

int main()

if (ok) ans+=a[i].r*(2*pi-count());

/*if (i==4) check();

if (dcmp(ans)==-1)*/}

printf("%.3f\n",ans);

}

BZOJ 1055 HAOI2008 玩具取名

題目 分析 正著想不好搞,狀態太多,也不好轉移,肯定超時。於是我們反著想,將一條字串歸約成乙個字母,首先能想到乙個字串必須要先變成字母,才能變成乙個字母,而且這兩個字母中的第乙個字母一定是由左邊歸約出來的,第二個字母是由右邊歸約出來的。好的思路馬上就來了,我們用dp i j k 表示字串 i,j 能...

Bzoj 1054 HAOI2008 移動玩具

在乙個4 4的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移動到某人心中的目標狀態。前4行表示玩具的初始狀態,每行4個數字1或0,1表示方格中放置了玩具,0表示沒...

BZOJ1042 HAOI2008 硬幣購物

description 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買si的價值的東西。請問每次有多少種付款方法。input 第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s output 每次的方法...