POJ 1113 Wall 凸包 模板題

2021-07-30 17:57:14 字數 987 閱讀 3774

用不嚴謹的話來講,給定二維平面上的點集,凸包就是將最外層的點連線起來構成的凸多邊型,它能包含點集中所有的點。

題意:給出n個點 n<=1e3和長度l,求出包圍n個點的最小凸多邊形周長 && 多邊形距離這n個點的距離》=l?

若不考慮l 則答案為凸包的周長,考慮條件l,由如下圖形 答案為:凸包周長+以l為半徑的圓的周長

求凸包用的是 

graham's scan法

可以根據歸納法來證明,棧中儲存的是前i-1個點集的凸包的極點

因為按極角排序後,若(p[i],棧頂,次棧頂)叉積<=0 則棧頂在(p[0],p[i],次棧頂)構成的三角形內部,棧頂不為前i個點集形成的凸包的極點. 淘汰棧頂直到條件成立,掃瞄o(n) 排序o(nlogn)

#include #include #include #include #include using namespace std;

const int n=2e5+20;

const double pi=acos(-1.0);

struct pointp[n];

int n;

int stack[n],top;

int cross(point p0,point p1,point p2)//p0p1 * p0p2叉積 判斷順/逆時針

double dis(point p1,point p2)

bool cmp(point p1,point p2)//極角排序 p[0]為最下方&&最左邊的點 }

}int main()

swap(p[0],p[low]);//p[0]為最下方&&最左邊的點

sort(p+1,p+n,cmp);

graham(n);

double res=0;

for(int i=0;i

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的圓即可,最後各個拐角處可以...

POJ 1113 Wall 凸包 思維

1.題意 給出n個點,讓你建立一圈圍牆,將n個點圍起來並且,每個點距離圍牆都 l,讓求在這個條件下的最小圍牆周長 2.分析 最小周長,首先想到凸包,但是這裡有個距離問題 我們最初想的,凸包周長整體外擴l 但是我們發現,每個凸包頂點,到圍牆頂點的距離 l,浪費了一部分 如果走這段弧長,假設有n個頂點,...