POJ 1228 穩定凸包

2021-09-11 07:54:23 字數 914 閱讀 9970

解題思路:

所謂穩定凸包就是不存在凸包外加入乙個點使得形成的新凸包還包含原凸包的所有點。

所以要使他是穩定的,那麼凸包的每條邊都必須有三個點,也就是除了兩個端點外邊上還有一點,這樣如果要在外加入乙個點的話必然使得邊上的點被消除,所以這樣的凸包也就是穩定的了。

#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int mx = 1e5 + 10;

int n,top,_x,_y;

struct node

s[mx],tubeg[mx],w;

//在向量右側值為負

int judge(node p1,node p2,node p0)//面積公式判斷正負值

bool cmp(node a,node b)

bool graham()

else ok = 1;

} return 1;

}int main()

if(n<6)

swap(s[0],s[p]),w.x = s[0].x,w.y = s[0].y;

sort(s+1,s+n,cmp);//以最下左那個座標為參考座標做極角排序

int last = n-2;

while(judge(s[0],s[n-1],s[last])==0&&last) last--;

reverse(s+last+1,s+n);//最後一部分如果是共線的話順序應該是距離長的在前

//與左下角中心的形成三點一線的在凸包中只有開始的點或者最後的點,可以自己去證明

puts(graham()?"yes":"no");

} return 0;

}

Poj1228 穩定凸包

題意 給定一些點,問這些點能不能夠成穩定的凸包,這有點不明不白的,我也是看了別人的報告才搞明白題意的,就是如果凸包上的一條邊如果不包含三個以上的點,它就是可以被向外擴充套件的.解題 弄明白了題意,以為會很簡單了,直接掃瞄求凸包就行了,而且是不用退棧的過程,後來在實現過程中才發現,即使給出的所有點都在...

POJ1228 穩定凸包

看題半天沒看懂意思,以為就是判斷是否有凸包結果。看了題解才知道,是要確定乙個凸包是否唯一,即不能通過新增點變成新的凸包,也就是凸包的每條邊上至少有3個點。include include include include include define maxl 1010 define eps 1e 8 ...

poj1228穩定凸包

就是給一系列點,看這是不是乙個穩定凸包 穩定凸包是指乙個凸包不能通過加點來使它擴大面積,也就是說每條邊最少有三個點 判斷的地方寫錯了,寫了兩邊迴圈,其實陣列s已經排好了序,直接每三個判斷就好了 include include include include include include inclu...