HAOI2008 下落的圓盤

2022-05-20 22:20:30 字數 1069 閱讀 7552

直接暴力o(n^2)列舉 每乙個圓盤和其後面落下的圓盤

i 當前列舉的圓 j i之後的圓

然後利用atan2函式求出(x[j]-x[i],y[j]-y[i])向量與x軸的夾角

再根據d(圓心之間距離)、r[i]、r[j]餘弦定理求出向量可以向上下擴充套件的角度

用貪心線段覆蓋...

列舉的時候有幾種特殊情況:

1.兩個圓相離

2.i在j內

3.j在i內

4.斜率不存在的情況不用考慮,atan2函式就行了

#include #include #include #include #include #include #define mem(a,b) memset(a,b,sizeof(a))

#define ll long long

#define dd double

using namespace std;

const int n=1006;

const dd pai=acos(-1.0);

struct son

else

if(lasr[i]+r[j])//i和j相離

continue;

if(d+r[i]0?pai/2.0:-pai/2.0);//直角 .... (還是別判斷了...容易wa)

else*/

ce1=atan2( (x[j]-x[i]),(y[j]-y[i]) );

ce2=acos( (r[i]*r[i]+d*d-r[j]*r[j])/(2*r[i]*d) );

sh=ce1+ce2;xi=ce1-ce2;

if(sh>pai)

ji[++con]=(son),sh=pai;

if(xi

ji[++con]=(son),xi=-pai;

ji[++con]=(son);

}temp=check();

//printf("temp=%lf\n",temp);

ans+=((2.0*pai-temp)*r[i]);

}return ans;

}int main()

下落的圓盤

1043 HAOI2008 下落的圓盤

time limit 10 sec memory limit 162 mb submit 1725 solved 743 submit status discuss 有n個圓盤從天而降,後面落下的可以蓋住前面的。求最後形成的封閉區域的周長。看下面這副圖,所有的紅 色線條的總長度即為所求.第一行為1個...

bzoj1043 下落的圓盤

time limit 10 sec memory limit 162 mb submit 1587 solved 669 submit status discuss 有n個圓盤從天而降,後面落下的可以蓋住前面的。求最後形成的封閉區域的周長。看下面這副圖,所有的紅 色線條的總長度即為所求.第一行為1個...

BZOJ1043 HAOI2008 下落的圓盤

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