POJ3348 Cows 求凸包面積

2022-02-15 22:03:55 字數 1186 閱讀 3609

題意:求給定的n個座標形成的凸包面積

套公式即可。

從而引入凸包

思路:本題利用叉乘求面積(選取凸包上的乙個點作為基點,然後把多邊形分成許多的三角形,然後用叉積去算三角形面積即可)

求解凸包用到的是andrew演算法,graham演算法的變種,速度更快穩定性也更好。

兩種演算法的複雜度均為o(nlogn),若輸入有序的話時間複雜度就均為o(n)

下面介紹andrew演算法:

andrew演算法執行步驟:

1、將所有的點按照橫座標從小到大進行排序,橫座標相同則按縱座標從小到大排;

2、將p[0]和p[1]加入凸包,然後從p[2]開始判斷,判斷方式同graham演算法中的判斷一致;

3、將所有的點掃瞄一遍以後,我們便可以得到乙個「下凸包」(為什麼?畫個圖就懂了--橫座標不會減小);

4、同理,我們從p[n-2]開始(p[n-1]已經判過了),反著掃瞄一遍,便可以得到乙個「上凸包」;

5、將兩個「半凸包」合在一起就是乙個完整的凸包,注意的是由於起點p[0]在正著掃瞄和反著掃瞄時都會將其加入凸包,故需要將最後乙個點(p[0])去掉才為最終結果。

ac**:

1 #include2 #include3 #include4 #include56

using

namespace

std;

7 typedef long

long

ll;8

#define inf 0x3f3f3f3f

9const

int n=10020;10

11struct

node

12p[n],st[n];

15int

n;16

17double

cross(node a,node b,node c)

1821

22int

cmp(node a,node b)

2328

29int

andrew()

3039

int k=x;

40for(int i=n-2;i>=0;i--)

4146

return x-1;47

}4849int

main()

5062

return0;

63 }

view code

POJ 3348 Cows 凸包 求面積

link 題意 給出點集,求凸包的面積 思路 主要是求面積的考察,固定乙個點順序列舉兩個點叉積求三角形面積和除2即可 date 2017 07 19 16 07 11 filename poj 3348 凸包面積 叉積.cpp platform windows author lweleth soun...

poj 3348 Cows 求凸包面積

給出n個點,求得到凸包的面積 多邊形面積顯然很好求,就是鄰邊叉積之和 2。問題在於怎麼求凸包上有哪些點。凸包顯然每個點都要在前兩個點連線的左邊 也就是逆時針位置 所以 1 先確定乙個最近的點當原點 最近 x最小的情況下y最小 2 以該點為原點將其餘點按極角排序 極角排序 約等同於將其他點按逆時針排列...

POJ 3348 Cows 凸包面積

題意 求凸包面積 50,取整 include include include include include include include using namespace std double eps 1e 12 struct cpoint double x mult cpoint a,cpoin...