1298 凸包周長

2022-05-03 10:12:19 字數 1730 閱讀 1654

時間限制: 1 s

空間限制: 128000 kb

題目等級 : 鑽石 diamond

題解檢視執行結果

給出平面上n個點,求出這n個點形成的凸包的周長。

凸包的定義:能覆蓋住這個n個點的最小凸多邊形。

輸入描述 input description

第一行乙個整數n,接下來n行,每行兩個整數x和y,表示乙個點的座標。

資料範圍 1 <= n <= 100000

-10000<=x,y<=10000  

輸出描述 output description

一行乙個實數,表示凸包周長,保留一位小數.

樣例輸入 sample input

0 02 2

0 22 0

1 1樣例輸出 sample output

8.0資料範圍及提示 data size & hint

無分類標籤 tags 點此展開 

計算幾何

//

andrew演算法

//核心思想:(以下凸包為例)順向,左邊就拐,否則後撤,直到能左拐。

#include#include

#include

using

namespace

std;

const

int n=1e5+5

;const

double eps=1e-10

;struct

vector

}p[n],ch[n];

intn;

vector

operator + (vector a,vector b)//

向量加法

vector operator - (vector a,vector b)//

向量減法

vector operator * (vector a,double p)//

向量乘以標量

vector operator / (vector a,double p)//

向量除以標量

bool

operator

< (const vector &a,const vector &b)

int dcmp(double x)

bool

operator ==(const vector &a,const vector &b)

double dot(vector a,vector b)//

向量點積

double length(vector a) //

向量長度,點積

double angle(vector a,vector b)//

向量轉角,逆時針,點積

double cross(vector a,vector b)//

向量叉積

double area2(vector a,vector b,vector c)//

三角形有向面積的兩倍

//計算凸包,輸入點陣列p,不重複個數cnt,輸出點陣列ch。函式返回凸包頂點個數。

//如果不希望在凸包的邊上有輸入點,把兩個 <=改成 <

intconvexhull()

int k=m;

for(int i=cnt-2;i>=0;i--)

if(cnt>1) m--;

returnm;}

intmain()

/*convexhull()段**來自小白書p272

*/

Codevs 1298 凸包周長

1298 凸包周長 時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題目描述 description 給出平面上n個點,求出這n個點形成的凸包的周長。凸包的定義 能覆蓋住這個n個點的最小凸多邊形。輸入描述 input description 第一行乙個整數n,接下來n...

Codevs 1298 凸包周長

1298 凸包周長 時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題目描述 description 給出平面上n個點,求出這n個點形成的凸包的周長。凸包的定義 能覆蓋住這個n個點的最小凸多邊形。輸入描述 input description 第一行乙個整數n,接下來n...

poj1113 求凸包 計算凸包周長

經典的求凸包題,模板題。要求用資源最少,那肯定這個多邊形是個凸多邊形,也就是凸包。所以先求出凸包,計算它的周長。還有就是這道題所說的,要離城牆l遠,其實就是在加上乙個圓的周長,圓的半徑就是l。都說到這了,這道題還差什麼?還差乙個經典的凸包模板!哈哈 如下 include include includ...