hdu 2187(凸包直径 1.枚举 2.旋转卡壳)

Beauty Contest
Time Limit: 3000MS   Memory Limit: 65536K
Total Submissions: 33115   Accepted: 10278

Description

Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest, earning the title 'Miss Cow World'. As a result, Bessie will make a tour of N (2 <= N <= 50,000) farms around the world in order to spread goodwill between farmers and their cows. For simplicity, the world will be represented as a two-dimensional plane, where each farm is located at a pair of integer coordinates (x,y), each having a value in the range -10,000 ... 10,000. No two farms share the same pair of coordinates.

Even though Bessie travels directly in a straight line between pairs
of farms, the distance between some farms can be quite large, so she
wants to bring a suitcase full of hay with her so she has enough food to
eat on each leg of her journey. Since Bessie refills her suitcase at
every farm she visits, she wants to determine the maximum possible
distance she might need to travel so she knows the size of suitcase she
must bring.Help Bessie by computing the maximum distance among all pairs
of farms.

Input

* Line 1: A single integer, N

* Lines 2..N+1: Two space-separated integers x and y specifying coordinate of each farm

Output

* Line 1: A single integer that is the squared distance between the pair of farms that are farthest apart from each other.

Sample Input

4
0 0
0 1
1 1
1 0

Sample Output

2

Hint

Farm 1 (0, 0) and farm 3 (1, 1) have the longest distance (square root of 2)

Source

题意:求最远的两个点。

分析:相隔最远的点肯定在凸包上,于是我们用凸包然后枚举,由于凸包上的点并不多,所以这是O(n*n)的枚举不会爆(141MS,我自己都没想到这么快),但是有旋转卡壳的方法,学习了之后再来补解法。

用处很广的旋转卡壳:http://blog.csdn.net/ACMaker

方法一:枚举(141MS)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std; const int N = ;
struct Point{
int x,y;
}p[N],Stack[N];
int n; int mult(Point a,Point b,Point c){
return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y);
}
int dis(Point a,Point b){
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
int cmp(Point a,Point b){
if(mult(a,b,p[])>) return ;
if(mult(a,b,p[])==&&dis(b,p[])>dis(a,p[])) return ;
return ;
}
int Graham(){
sort(p+,p+n,cmp);
int top = ;
Stack[]=p[];
Stack[]=p[];
Stack[]=p[];
for(int i=;i<n;i++){
while(top>=&&mult(p[i],Stack[top],Stack[top-])>=){
top--;
}
Stack[++top]=p[i];
}
return top;
}
int main()
{
while(scanf("%d",&n)!=EOF){
for(int i=;i<n;i++){
scanf("%d%d",&p[i].x,&p[i].y);
}
int k = ;
for(int i=;i<n;i++){
if(p[k].y>p[i].y||(p[k].y==p[i].y)&&(p[k].x>p[i].x)){
k=i;
}
}
swap(p[],p[k]);
//printf("%d %d\n",p[0].x,p[0].y);
int top = Graham();
int ans =;
for(int i=;i<=top;i++){
for(int j=i+;j<=top;j++){
if(ans<dis(Stack[i],Stack[j])){
ans = dis(Stack[i],Stack[j]);
}
}
}
printf("%d\n",ans);
}
return ;
}

方法二:旋转卡壳 (94MS)

图引自:http://www.cnblogs.com/Booble/archive/2011/04/03/2004865.html

aaarticlea/png;base64,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" alt="" />(图一)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std; const int N = ;
struct Point{
int x,y;
}p[N],Stack[N];
int n; int mult(Point a,Point b,Point c){
return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y);
}
int dis(Point a,Point b){
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
int cmp(Point a,Point b){
if(mult(a,b,p[])>) return ;
if(mult(a,b,p[])==&&dis(b,p[])>dis(a,p[])) return ;
return ;
}
int Graham(){
sort(p+,p+n,cmp);
int top = ;
Stack[]=p[];
Stack[]=p[];
Stack[]=p[];
for(int i=;i<n;i++){
while(top>=&&mult(p[i],Stack[top],Stack[top-])>=){
top--;
}
Stack[++top]=p[i];
}
return top;
}
int rotating_calipers(int top)//旋转卡壳
{
int q=,ans=,p;
Stack[++top]=Stack[]; ///将最后一个点和第一点的边也要算进去,于是多加一个点表示第一个点
for(p=; p<top; p++)
{
     ///找到以Stack[p] 和 Stack[p+1]这两个点为底边的最大三角形 (叉积之积为三角形有向面积)(图1)
while(mult(Stack[p],Stack[p+],Stack[q+])>mult(Stack[p],Stack[p+],Stack[q]))
q=(q+)%top;
     ///在底边的两个点中选择与顶点距离大的
ans=max(ans,max(dis(Stack[p],Stack[q]),dis(Stack[p+],Stack[q+1])));
}
return ans;
}
int main()
{
while(scanf("%d",&n)!=EOF){
for(int i=;i<n;i++){
scanf("%d%d",&p[i].x,&p[i].y);
}
int k = ;
for(int i=;i<n;i++){
if(p[k].y>p[i].y||(p[k].y==p[i].y)&&(p[k].x>p[i].x)){
k=i;
}
}
swap(p[],p[k]);
//printf("%d %d\n",p[0].x,p[0].y);
int top = Graham();
int ans =rotating_calipers(top);
printf("%d\n",ans);
}
return ;
}
上一篇:js之数组排序


下一篇:WordPress Plugin Contact Form Builder [CSRF → LFI]