題意:
國王想建乙個周長最短的城牆,使牆的任意一點到城牆的距離都 大於 rr。求這面牆的周長。
題解:凸包 水平序graham掃瞄法
顯然答案就是:凸包的周長+半徑為rr的圓的周長
view code
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7特別說明:8#define n 1010
9#define eps 1e-7
10#define pi 3.1415926535
1112
using
namespace
std;
1314
struct
po15
p[n],stk[n];
1819
double
rr,ans;
20int
n;21
22 inline bool cmp(const po &a,const po &b)
2327
28 inline void
read()
2933
34 inline double cross(const po &o,const po &a,const po &b)
3538
39 inline double get_dis(const po &a,const po &b)
4043
44 inline void
graham()
4553
for(int i=n-1;i>=1;i--)
5458 ans=0.0;59
for(int i=1;i1
]);60}61
62 inline void
go()
6368
69int
main()
70
一般的我們求的凸包是使其中的點盡量少,也就是說,若多點共線,只保留兩個端點,判斷的時候就是叉積等於0時也彈棧,但是這樣會有bug
當叉乘的兩個向量相反時,就會彈棧,出現錯誤!
樣例真良心,樣例就能拍出這個錯!
又寫了乙個優化的:
view code
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 78#define n 1010
9#define eps 1e-7
10#define pi 3.1415926535
1112
using
namespace
std;
1314
struct
po15
p[n];
1819
double
rr,ans;
20int
n,stk[n];
2122 inline bool cmp(const po &a,const po &b)
2327
28 inline void
read()
2933
34 inline double cross(const po &o,const po &a,const po &b)
3538
39 inline double get_dis(const po &a,const po &b)
4043
44 inline void
graham()
4554
int num=top;
55for(int i=n-1;i>=1;i--)
5660 ans=0.0;61
for(int i=1;i1
]]);62}
6364 inline void
go()
6570
71int
main()
72
poj1113 求凸包 計算凸包周長
經典的求凸包題,模板題。要求用資源最少,那肯定這個多邊形是個凸多邊形,也就是凸包。所以先求出凸包,計算它的周長。還有就是這道題所說的,要離城牆l遠,其實就是在加上乙個圓的周長,圓的半徑就是l。都說到這了,這道題還差什麼?還差乙個經典的凸包模板!哈哈 如下 include include includ...
POJ1113 凸包周長計算
題目大意 給出n個點的座標,計算這些點的凸包的周長,但是還需要加上一些距離,因為它規定城牆必須離給定的點 城堡 一定得距離m.思路 上面說的比較明白了,其實直接套用模板就好了,當然要加上的圓的距離只是乙個圓就好了,這個大家畫個圖就能夠發現,三角形,矩形,加上的都是乙個圓,這個是可以證明的,大家去找規...
poj 1113 凸包模板
include include include include include include using namespace std define n 1050 define pi acos 1.0 int n,r struct point point operator point b const...