zoukankan      html  css  js  c++  java
  • poj 2187 Beauty Contest 凸包模板+求最远点对

    题目链接

    题意:给你n个点的坐标,n<=50000,求最远点对

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    #include <vector>
    #include <queue>
    #include <map>
    #include <algorithm>
    #include <set>
    using namespace std;
    #define MM(a) memset(a,0,sizeof(a))
    typedef long long ll;
    typedef unsigned long long ULL;
    const int mod = 1000000007;
    const double eps = 1e-10;
    const int inf = 0x3f3f3f3f;
    const int big=50000;
    int max(int a,int b) {return a>b?a:b;};
    int min(int a,int b) {return a<b?a:b;};
    struct node{
      int x, y;
    }ne[50005];
    bool cmp(node a,node b)
    {
       if(a.x!=b.x)
           return a.x<b.x;
       return a.y<b.y;
    }
    
    int cross(node a,node b,node c)
    {
       return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
    }
    
    int a[50005],m,k;
    void tubao(int n)
    {
        sort(ne+1,ne+n+1,cmp);
        m=0;
    
        for(int i=1;i<=n;i++)
            {
             while(m>=2&&cross(ne[a[m-1]],ne[a[m]],ne[i])<=0)
                    m--;
               ++m;
               a[m]=i;
            }
        k=m;
        for(int i=n-1;i>=1;i--)
          {
            while((m>=k+1)&&cross(ne[a[m-1]],ne[a[m]],ne[i])<=0)
                    m--;
            ++m;
            a[m]=i;
          }
    }
    
    double dist(int i,int j)
    {
         return (ne[i].x-ne[j].x)*(ne[i].x-ne[j].x)
         +(ne[i].y-ne[j].y)*(ne[i].y-ne[j].y);
    }
    
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            for(int i=1;i<=n;i++)
                scanf("%d %d",&ne[i].x,&ne[i].y);
            tubao(n);
            int maxn=0;
            for(int i=1;i<=k;i++)
                for(int j=k+1;j<=m;j++)
                  maxn=max(maxn,dist(a[i],a[j]));
            //for(int i=1;i<=m;i++)
              //    cout<<"|||"<<a[i]<<endl;
            printf("%d
    ",maxn);
        }
        return 0;
    }
    

      分析:模板

    wa代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    #include <vector>
    #include <queue>
    #include <map>
    #include <algorithm>
    #include <set>
    using namespace std;
    #define MM(a) memset(a,0,sizeof(a))
    typedef long long ll;
    typedef unsigned long long ULL;
    const int mod = 1000000007;
    const double eps = 1e-10;
    const int inf = 0x3f3f3f3f;
    const int big=50000;
    int max(int a,int b) {return a>b?a:b;};
    int min(int a,int b) {return a<b?a:b;};
    struct node{
      int x, y;
    }ne[50005];
    bool cmp(node a,node b)
    {
       if(a.x!=b.x)
           return a.x<b.x;
       return a.y<b.y;
    }
    
    int cross(node a,node b,node c)
    {
       return (b.x-a.x)*(c.y-b.y)-(c.x-b.x)*(b.y-a.y);
    }
    
    int a[50005],m;
    void tubao(int n)
    {
        sort(ne+1,ne+n+1,cmp);
        m=0;
    
        for(int i=1;i<=n;i++)
            {
               if(m>2&&cross(ne[a[m-1]],ne[a[m]],ne[i])<0)
                    m--;
               a[++m]=i;
            }
    
        for(int i=n-1;i>=1;i--)
          {
            if(i<=(n-2)&&cross(ne[i],ne[a[m]],ne[a[m-1]])>0)
                    m--;
            a[++m]=i;
          }
    }
    
    double dist(int i,int j)
    {
         return (ne[i].x-ne[j].x)*(ne[i].x-ne[j].x)
         +(ne[i].y-ne[j].y)*(ne[i].y-ne[j].y);
    }
    
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            for(int i=1;i<=n;i++)
                scanf("%d %d",&ne[i].x,&ne[i].y);
            tubao(n);
            int maxn=0;
            for(int i=1;i<=m;i++)
                for(int j=1;j<=m;j++)
                  if(i!=j)
                  maxn=max(maxn,dist(a[i],a[j]));
            //for(int i=1;i<=m;i++)
              //    cout<<"|||"<<a[i]<<endl;
            printf("%d
    ",maxn);
        }
        return 0;
    }
    

      

  • 相关阅读:
    mongoDB
    昆仑会员此打印方式只针对用会员卡结账的消费,放开限制解决方案
    用jdk1.6的pack200和unpack200,对jar文件进行压缩和解压 .pack.gz
    ffmpeg
    关于golang-mod的使用方法
    组件&Props
    元素渲染
    JSX 简介
    React-HelloWorld
    Vue与REACT两个框架的区别和优势对比
  • 原文地址:https://www.cnblogs.com/smilesundream/p/5243759.html
Copyright © 2011-2022 走看看