POJ 1113 Wall 凸包周長

2021-09-11 11:42:01 字數 1338 閱讀 3871

題意:給定n

nn個城堡的座標,要求建設連續的圍牆,且圍牆上任意一點距離任意城堡距離不小於l

ll,求圍牆的最小長度。

求出這些點的凸包,答案即凸包長度加上乙個半徑為l

ll的圓的周長,即對於凸包的邊,在距離凸包邊l

ll處建設平行的圍牆即可,而對於拐角處,畫半徑為l

ll的圓即可,最後各個拐角處可以拼成乙個半徑為l

ll的完整圓。

#include

#include

#include

#include

#include

using namespace std;

const

double pi=

acos(-

1.0)

;struct point

point

(int _x,

int _y)

point operator -

(const point &b)

const

int operator ^

(const point &b)

const

int operator *

(const point &b)

const

void

input()

};//距離的平方

intdist2

(point a,point b)

//二維凸包(int)

const

int maxn=

50010

;point list[maxn]

;int stack[maxn]

,top;

//相對於list[0]進行極角排序

bool _cmp

(point p1,point p2)

void

graham

(int n)

}swap

(list[k]

,list[0]

);sort

(list+

1,list+n,_cmp);if

(n==1)

if(n==2)

stack[0]

=0; stack[1]

=1; top=2;

for(

int i=

2;iintcalcarea

(point p,

int n)

intround_double

(double number)

point p[maxn]

;int

main()

POJ 1113 Wall 凸包求周長

大意 給定些點,組成多邊形,問有沒有圓把多邊形圍起來並且圓距離多邊形最小的距離是m 求多邊形的邊長。思路 首先要知道怎麼求外邊圓的周長,l圓 l 半徑為m的圓 凸包外接圓半徑。至於為什麼要加上小圓半徑因為所有的小圓的一部分角度加和一定為360。include include include incl...

POJ1113 Wall 求凸包周長

題意 國王要把n個城堡外建城牆,使得城牆距離任一城堡的距離都大於l,給出n個城堡的座標,求城牆的最小周長。思路 利用城堡的座標可以形成乙個凸包,在拐角處畫乙個半徑為l的圓弧,最終所有圓弧合起來正好是乙個半徑為l的圓,所以答案就是凸包的周長 半徑為l的圓的周長。先求凸包的頂點,再叉積求面積,兩點間的距...

POJ 1113 Wall 圍牆 凸包

題意 給出一系列的點,在凸包外面l公尺建造圍牆,求圍牆的長度。其實就是裸凸包 半徑l的圓周長。這題卡了一下午.由於裡面的精度有些問題.後面輸出最好用 f不要用lf和int轉換.第一次做凸包,感覺還好.author illuz blog file poj1113.cpp create date 201...