POJ 1113 凸包周長

2022-05-24 03:36:07 字數 2076 閱讀 4327

題意:

國王想建乙個周長最短的城牆,使牆的任意一點到城牆的距離都 大於 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 7

8#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...