• 【POJ2187】Beauty Contest


    大致题意:给定一个散点集,求最远点距的平方。

    题解:旋转卡壳裸题

    代码如下:

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cmath>
     5 #define MN 50005
     6 using namespace std;
     7 int n,top=-1,tmp;
     8 double ans;
     9 struct point{
    10     double x,y;
    11     point(double X=0,double Y=0){x=X,y=Y;}
    12     friend bool operator <(point a,point b){
    13         return a.x<b.x||(a.x==b.x&&a.y<b.y);
    14     }
    15 }p[MN],q[MN];
    16 point operator +(point a,point b){return point(a.x+b.x,a.y+b.y);}
    17 point operator -(point a,point b){return point(a.x-b.x,a.y-b.y);}
    18 double cross(point a,point b){return a.x*b.y-a.y*b.x;}
    19 double len(point a){return a.x*a.x+a.y*a.y;}
    20 int main()
    21 {
    22     scanf("%d",&n);
    23     for(int i=1;i<=n;i++) scanf("%lf%lf",&p[i].x,&p[i].y);
    24     sort(p+1,p+1+n);
    25     for(int i=1;i<=n;i++){
    26         while(top>=1&&cross(q[top]-q[top-1],p[i]-q[top-1])<=0)top--;
    27         q[++top]=p[i];
    28     }tmp=top;
    29     for(int i=n-1;i>=1;i--){
    30         while(top>tmp&&cross(q[top]-q[top-1],p[i]-q[top-1])<=0)top--;
    31         q[++top]=p[i];
    32     }
    33     for(int i=0;i<top;i++){
    34         tmp=1;
    35         while(cross(q[i+1]-q[i],q[tmp+1]-q[i])>cross(q[i+1]-q[i],q[tmp]-q[i]))tmp=(tmp+1)%top;
    36         ans=max(ans,max(len(q[tmp]-q[i]),max(len(q[tmp+1]-q[i]),max(len(q[tmp]-q[i+1]),len(q[tmp+1]-q[i+1])))));
    37     }
    38     printf("%.0lf",ans);
    39     return 0;
    40 }
  • 相关阅读:
    HDOJ 4248 A Famous Stone Collector DP
    Android开发系列(十九个):至SimpleAdapter设置样式
    matlab入门 蜂窝阵列
    OpenGL缓冲区
    如何在终端编辑命令
    struts2跳转类型解析
    设计模式(Facade)状态(注意事项)
    Swift与Objective-C API的交互
    Swift调用Objective C的FrameWork
    初探swift语言的学习—Object-C与Swift混编
  • 原文地址:https://www.cnblogs.com/Beginner-/p/8479383.html
Copyright © 2020-2023  润新知