POJ 3608 旋轉卡殼

2022-05-24 03:18:11 字數 1778 閱讀 6450

題意:

求兩個凸包的最近距離。

題解:原來旋轉卡殼這麼暴力。。我以前一直以為是o(n)的。。。

畫畫圖,用叉積判斷下旋轉角度就行了~

view code

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

8#define n 22222

9#define pi 3.14159265358979

10#define eps 1e-7

1112

using

namespace

std;

1314

struct

po15

p1[n],p2[n],o;

1819

intn,m,top1,top2,stk1[n],stk2[n];

2021 inline int doublecmp(double

x)22

2728 inline bool cmp(const po &a,const po &b)

2933

34 inline void

read()

3539

40 inline po operator +(po a,po b)

4147

48 inline po operator -(po a,po b)

4955

56 inline double dot(po &a,po &b,po &c)

5760

61 inline double cross(po &a,po &b,po &c)

6265

66 inline double getlen(po &a)//

向量的模

6770

71 inline po getty(po b,po a)//

投影向量

7278

79 inline double getangle(po &a,po &b,po&c,po &d)

8084

85 inline po rotate(po a,double

hd)86

9293 inline double getdis(po &a,po &b)

9497

98 inline double getdis_ps(po &a,po &b,po &c)

99108

109 inline void graham(po *p,int *stk,int &top,int

gs)110

119int tmp=top;

120for(int i=gs-1;i>=1;i--)

121125

}126

127 inline double

rotating_calipers()

128147

else

if(doublecmp(af)>0)//

卡殼到第乙個的邊,第二個的點

148152

else

//卡殼到第二個的邊,第乙個的點

153157 }while(t1!=s1||t2!=s2);

158return

ans;

159}

160161 inline void

go()

162167

168int

main()

169

這題太坑了,凸包寫錯了都能ac。。

害得我下一道題直接粘的這個凸包,wa了一下午。。

POJ 3608 旋轉卡殼求解凸包間的最短距離

題意給你兩個凸包,求解兩個凸包間的最短距離。include include include include include using namespace std define max n 10000 10 define inf 0x3f3f3f3f define eps 1e 10 struct ...

旋轉卡殼 POJ2079

推介blog 1.旋轉卡殼求凸包直徑 如上圖 我們定起始點為a,首先從a點開始你順時針找到凸包上距離a點最大距離的e點 由於a到f的距離小於a到e的距離,此時我們旋轉線的左端點到b點,再去計算b到f的距離,之後旋轉線段的右端點,發現bg的距離小於bf,此繼續旋轉左端點到下乙個頂點。每次旋轉卡殼的操作...

poj 2187(旋轉卡殼)

傳送門 模板題,求凸包,用旋轉卡殼求出最遠點對。因為把int弄成double,wa了好幾次,差點對idy大神給的模板失去信心。不過事實證明idy的寫法沒問題,orz!include include include include include include using namespace std...