• poj2187 Beauty Contest 凸包求点集的直径


    http://poj.org/problem?id=2187
    题意:给定平面的一些点,求最远两点距离的平方值。
    解题:用Graham法求凸包,注意凸包边上如果存在点要保留,因为存在所有的点组成的是一条直线的情况。再用枚举法求凸包的直径,当然凸包直径也可用旋转卡壳求解,可惜这种方法我还不是很清楚。

    #include<stdio.h>
    #include<stdlib.h>
    #include <iostream>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    #define maxn 50005
    struct point{
        double x,y;
    }list[maxn],s[maxn];
    int n,top;
    double m(point p1,point p2,point p0){
        return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
    }
    bool cmp(point p1,point p2){
        double t;
        t=m(p1,p2,list[0]);
        if(t>0||(t==0&&pow(p1.x-list[0].x,2)+pow(p1.y-list[0].y,2)<pow(p2.x-list[0].x,2)+pow(p2.y-list[0].y,2)))
            return 1;
        else return 0;
    }
    void  Graham()
    {
        int i;
        sort(list+1,list+n,cmp);
        for(i=0;i<3;i++)s[i]=list[i];
        top=2;
        for(i=3;i<n;i++){
            while(top>0&&(m(list[i],s[top],s[top-1])>=0))top--;
            s[++top]=list[i];
        }
    }   
    int main()
    {
        int i,j,ans,dis;
        double area;
        point t;
        while(scanf("%d",&n)!=EOF)
        {
            for(i=0;i<n;i++){
                scanf("%lf%lf",&list[i].x,&list[i].y);
                if((list[i].y<list[0].y)||(list[i].y==list[0].y&&list[i].x<list[0].x)){
                    t=list[0];
                    list[0]=list[i];
                    list[i]=t;
                }
            }
            Graham();
            ans=-1;
                    for(i=0;i<top;i++)
                    for(j=i+1;j<=top;j++)
                    {
                        dis=(s[i].x-s[j].x)*(s[i].x-s[j].x)+(s[i].y-s[j].y)*(s[i].y-s[j].y);
                        if(dis>ans)
                        ans=dis;
                    }
            printf("%d\n",ans);
        }
        return 0;
    }

  • 相关阅读:
    Oracle数据库编程
    使用JDBC处理MySQL大文本和大数据
    phpcms之带图片的登录信息(带cookie版)(由于cookie和PHPCMS的原因,这个暂时无法使用,看新的)
    phpcms之调用导航栏
    phpcms之修改默认显示文字
    phpcms之创建自己的路径
    dedecms 动态tab写法
    关于dedecms的操作
    12/23
    12/21
  • 原文地址:https://www.cnblogs.com/zxj015/p/2740283.html
Copyright © 2020-2023  润新知