時間限制: 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...