凸包掃瞄 旋轉卡殼 UVALive 4728

2021-06-28 06:52:26 字數 1138 閱讀 2544

題意:給n個正方形,求正方形的頂點之間的最大距離。

思路:可以確定的是最遠距離的2個點一定在這些正方形的頂點的凸包上的2個點。所以先求一次凸包。 求凸包上2個點的最打距離,實際就是就凸包的直徑,有成型的演算法。可以用旋轉卡殼直接求解。

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

const int mod=99999997;

const int mmax=200010;

const double eps=1e-8;

const double pi=acos(-1.0);

const int inf=0x3fffffff;

#define debug

#define mmax 200010

//typedef __int64 ll;

int sgn(double x)

struct point

void read()

};bool operator < (const point &a,const point &b)

int k=m;

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

if(n>1) m--;

return m;

}double angle(vector v)

//旋轉卡殼

int rotatestuck(int m,point * poly)

int m_dis=length(poly[i]-poly[j]);

int cnt=0;

while(sgn(angi-pi)<=0)

else if(sgn(dangi-dangj)<0)

else if(sgn(dangi-dangj)>0)

}return m_dis;

}point p[400010],poly[400010];

int main()

{ int n,t;

int x,y,r;

cin>>t;

while(t--)

{cin>>n;

for(int i=0;i

凸包問題 旋轉卡殼

1978年,m.i.shamos在 computational ceometry 中介紹了一種尋找凸多邊形直徑的線性演算法。1.支撐線 如果一條直線l,通過凸多邊形p的乙個頂點,且多邊形在這條直線的一側,稱l是p的支撐線。2.對踵 zhong,三聲 點 如果過凸包上的兩個點可以畫一對平行直線,使凸包...

模板 凸包 旋轉卡殼

模板 凸包 旋轉卡殼 lrj 訓練指南 p272 對於個點按照 x 從小到大排序,再按照 y 點從小到大排序,刪除重複的點後,得到序列 p0,p1,p2.把 p0 和 p1 放入凸包。從p2開始,當新點在凸包 前進 方向的左邊時繼續,否則依次刪除最近加入凸包的點,直到新點在左邊 ps 判斷用叉積即可...

旋轉卡殼 凸包的直徑

poj 2187 直接求直徑ok 多邊形的直徑被定義為多邊形上任意兩點間的最大距離的值。在多邊形上,決定直徑的點可能不止一對。事實上,如果乙個多邊形含有n個頂點,那麼就最多有 n 對 直徑點對 在。上圖所示的是乙個簡單的多邊形直徑的例項。直徑點對在圖中是被平行的切線 用紅色表示 穿過的黑點.直徑是用...