題意:
國王要把n個城堡外建城牆,使得城牆距離任一城堡的距離都大於l,給出n個城堡的座標,求城牆的最小周長。
思路:利用城堡的座標可以形成乙個凸包,在拐角處畫乙個半徑為l的圓弧,最終所有圓弧合起來正好是乙個半徑為l的圓,所以答案就是凸包的周長+半徑為l的圓的周長。
先求凸包的頂點,再叉積求面積,兩點間的距離公式求周長。
注意:因為結果四捨五入,
處理方法:
輸出用%.0f,表示輸出浮點數整數部分,省略小數部分;
或者在double後面加上0.5,在最後輸出的時候把double型別強制轉換成int即可,注意加(int),不要直接%d輸出。
ac**:
1 #include2 #include3 #include4 #include5 #include67view codeusing
namespace
std;
8 typedef long
long
ll;9
#define inf 0x3f3f3f3f
10#define pi acos(-1)
11const
int n=1020;12
13struct
node
14p[n],st[n];
17int
n;18
19double cross(node a,node b,node c)//
計算叉積 ab*ac
2023
24int
cmp(node a,node b)
2530
31double
dist(node a,node b)
3235
36int
andrew()
3746
int k=x;
47for(int i=n-2;i>=0;i--)
4853
return x-1;54
}5556int
main()
5771
return0;
72 }
POJ 1113 Wall 凸包求周長
大意 給定些點,組成多邊形,問有沒有圓把多邊形圍起來並且圓距離多邊形最小的距離是m 求多邊形的邊長。思路 首先要知道怎麼求外邊圓的周長,l圓 l 半徑為m的圓 凸包外接圓半徑。至於為什麼要加上小圓半徑因為所有的小圓的一部分角度加和一定為360。include include include incl...
POJ 1113 Wall 圍牆 凸包
題意 給出一系列的點,在凸包外面l公尺建造圍牆,求圍牆的長度。其實就是裸凸包 半徑l的圓周長。這題卡了一下午.由於裡面的精度有些問題.後面輸出最好用 f不要用lf和int轉換.第一次做凸包,感覺還好.author illuz blog file poj1113.cpp create date 201...
POJ 1113 Wall 凸包周長
題意 給定n nn個城堡的座標,要求建設連續的圍牆,且圍牆上任意一點距離任意城堡距離不小於l ll,求圍牆的最小長度。求出這些點的凸包,答案即凸包長度加上乙個半徑為l ll的圓的周長,即對於凸包的邊,在距離凸包邊l ll處建設平行的圍牆即可,而對於拐角處,畫半徑為l ll的圓即可,最後各個拐角處可以...