struct point{
int x,y;
point(){}
point(int xx,int yy){x=xx;y=yy;}
point operator-(point const &b)const{
return point(x-b.x,y-b.y);
}
int friend operator*(point a,point b){
return f_abs(a.x*b.y-a.y*b.x);
}
int len2(){
return x*x+y*y;
}
};
/*==================================================*\
| rotating_calipers 旋轉卡殼 O(N)
| CALL: res = graham(pnt, n); res爲最遠點距離平方;
\*==================================================*/
int rotating_calipers(point pnt[],int n){
int q=1,ans=0,i;
for(i=0;i<n;i++){
while( (pnt[(i+1)%n]-pnt[i])*(pnt[(q+1)%n]-pnt[i])>(pnt[(i+1)%n]-pnt[i])*(pnt[q]-pnt[i]))q=(q+1)%n;
ans=f_max(ans , f_max((pnt[i]-pnt[q]).len2(),(pnt[(i+1)%n]-pnt[(q+1)%n]).len2()));
}
return ans;
}
旋轉卡殼 求最遠點對
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.