POJ2187Beauty Contest

来源:互联网 发布:淘宝网2017女装冬装 编辑:程序博客网 时间:2024/05/19 23:15

POJ2187

平面最远点对裸题。
来填坑了QAQ。
(求完凸包暴力都能过差评)

【代码】

#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#define N 50005using namespace std;typedef long long ll;ll read(){    ll x=0,f=1;char ch=getchar();    while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}    while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}    return x*f;}int n,top;class Node{    public:        double x,y;    Node(){}    Node(double xx,double yy){        x=xx,y=yy;    }}e[N],q[N];bool operator <(Node a,Node b){    return a.x<b.x||(a.x==b.x&&a.y<b.y);}Node operator -(Node a,Node b){    return Node(a.x-b.x,a.y-b.y);}double cross(Node a,Node b){    return a.x*b.y-a.y*b.x;}void Andrew(){    sort(e+1,e+1+n);    q[++top]=e[1];    for(int i=2;i<=n;i++)    {        while(top>1&&cross(q[top]-q[top-1],e[i]-q[top-1])<=0) top--;        q[++top]=e[i];    }    int k=top;    for(int i=n-1;i;i--)    {        while(top>k&&cross(q[top]-q[top-1],e[i]-q[top-1])<=0) top--;        q[++top]=e[i];    }}double ans;double Dis(Node a,Node b){    return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);}void Rc(){    int s=2;    for(int i=1;i<top;i++)    {        while(cross(q[i+1]-q[i],q[s]-q[i])<cross(q[i+1]-q[i],q[s+1]-q[i+1]))            s=s%(top-1)+1;        ans=max(ans,max(Dis(q[s],q[i]),Dis(q[s+1],q[i+1])));    }    printf("%d\n",(int)ans);}int main(){    n=read();    for(int i=1;i<=n;i++)        e[i].x=read(),e[i].y=read();    Andrew();    Rc();    return 0;}
0 0