zoukankan      html  css  js  c++  java
  • hdu 6219 Empty Convex Polygons

    - -先mark了

    http://blog.csdn.net/nyroro/article/details/45268767

    https://vjudge.net/solution/1919422

    #include <stdio.h>
    #include <algorithm>
    #include <string.h>
    
    using namespace std;
    #define maxn 110
    struct point{
        int x,y;
        point(){}
        point(int x,int y):x(x),y(y){}
        point operator+(const point&a)const{return point(x+a.x,y+a.y);}
        point operator-(const point&b)const{return point(x-b.x,y-b.y);}
        int operator*(const point&a)const{return x*a.y-y*a.x;}
        int norm()const{return x*x+y*y;}
        int operator <(const point&a)const{return (*this)*a>0||(*this)*a==0&&norm()<a.norm();}
        void out(){printf("x:%d y:%d
    ",x,y);}
        void in(){scanf("%d%d",&x,&y);}
    };
    //bool cmp(const point&a,const point&b )
    //{
    //    return a*b>0||a*b==0&&a.norm()<b.norm();
    //}
    int n;
    point src[maxn];
    point dat[maxn];
    int f[maxn][maxn];
    
    int scan(int tot)
    {
        int res=0;
        memset(f,0,sizeof f);
        for(int i=1;i<tot;i++ )
        {
            int j=i-1;
            while(j>=0&&dat[i]*dat[j]==0)j--;
            bool flag= j==i-1;//判断共线
            while(j>=0)
            {
                int area=dat[j]*dat[i];
                int k=j-1;
                while(k>=0&&(dat[j]-dat[i])*(dat[k]-dat[j])>0)k--;
                if(k>=0)area+=f[j][k];
                if(flag)f[i][j]=area;
                res=max(res,area);
                j=k;
            }
            if(flag)for(int j=1;j<i;j++)
                f[i][j]=max(f[i][j],f[i][j-1]);
        }
        return res;
    }
    int solve(){
        int res=0;
        for(int i=0;i<n;i++){
            int m=0;
            for(int j=0;j<n;j++)
                if(src[j].y>src[i].y||(src[j].y==src[i].y&&src[j].x>=src[i].x))
                dat[m++]=src[j]-src[i];
           // printf("m:%d i:%d
    ",m,i);
    
            //dat[0].out();
            sort(dat,dat+m);
            //dat[0].out();
            res=max(res,scan(m));
        }
        return res;
    }
    int main(){
    #ifdef shuaishuai
        freopen("C:\Users\hasee\Desktop\a.txt","r",stdin);
      // freopen("C:\Users\hasee\Desktop\b.txt","w",stdout);
    #endif
        int t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            for(int i=0;i<n;i++ )src[i].in();
            double ans=(double)solve()/2.0;
            printf("%.1f
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    Eclipse安装Hadoop插件
    (转)Ubuntu14.0.4中hadoop2.4.0伪分布模式配置
    Hadoop--DataNode无法启动
    启动与关闭hadoop
    hadoop中执行命令时发生错误
    strings命令
    Deriving data from ElasticSearch Engine
    elasticsearch data importing
    reading words in your computer and changing to female voice, linux festival text2wave saving wav files
    DDNS client on a Linux machine
  • 原文地址:https://www.cnblogs.com/MeowMeowMeow/p/7794400.html
Copyright © 2011-2022 走看看