傳送門
小馬承包了乙個果園,想修乙個圍欄,但是不希望砍掉任何的果樹。對於給出的所有的果樹的座標,計算一下最小的圍住所有的果樹的圍欄的長度。
輸入資料的第一行包括乙個整數 n(0≤ n ≤10,000)表示農夫約翰想要圍住的放牧點的數目。接下來 n 行,每行由兩個由空格分隔的實數組成,xi 和 yi,對應平面上的放牧點座標(-1,000,000 ≤ xi,yi ≤ 1,000,000)。數字用小數表示。
輸出包括乙個實數,表示必須的圍欄的長度(保留兩位有效小數)
樣例輸入
44 8
4 12
5 9.3
7 8
樣例輸出12.00
解題思路:
直接計算乙個二維凸包,然後計算凸包上相鄰兩兩點的距離,然後加和就是周長。
**:
#include
#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
const
double inf = 1e18+5;
const
int maxn = 1e4 + 5;
const
double eps = 1e-10;
const
double pi = acos(-1.0);
int double_cmp(double x)
struct point
point (double _x, double _y, int i):x(_x),y(_y),id(i) {}
bool
operator
<(const
struct point &tmp)const
bool
operator == (const
struct point &tmp)const
} p[maxn],st[maxn];
bool cmp(const point& p1, const point& p2)
double xmulti(point a, point b, point c)///ac x ab
double dis(point a, point b)
double dis2(point a, point b)
double dot(point a, point b, point c)///點積 ab . ac
int convexhull(point *p, int n, point *st)///凸包
int k = m;
for(int i=n-2; i>=0; i--)
if(n > 1)
m--;
return m;
}int main()
return
0;}
計蒜客 羊圈復原 (凸包模板)
題目大意 判斷羊圈是否能夠復原。題目思路 首先先求出凸包,如果凸包每條邊上都有點存在的話,那麼這凸包和原來是一樣的,否則有可能和原來不一樣。也就是說你需要來判斷兩點之間是否是緊挨著的,如果是則不滿足。坑點 用graham scan的演算法,會忽略一開始時三點共線的情況,所以要考慮這種情況,否則會出現...
二維凸包演算法
部落格參考 謝謝 chao xun 把凸包寫的這麼詳細。關於凸包的問題的解決的最初思路是這樣的。1 找到乙個基準點 必須在凸邊上 2 以基準點做射線,然後將該射線向固定方向旋轉,直到接觸到乙個新的點。3 以 2 中找到的點作為新的基準點,作射線繼續朝著一開始的固定的方向旋轉 4 反覆重複2,3直到最...
題解 二維凸包
呵呵呵複習一下這個東西免得做到計算幾何連暴力都不會嚶嚶嚶 免得到時候寫斜率優化結果凸包不會了嚶嚶嚶 數學走起 vec x 1,y 1 vec x 2,y 2 shadow times vec x 1y 2 x 2y 1 根據右手螺旋定則。shadow 是我亂搞的符號,雖然我搞不懂為什麼是這樣,但是這...