• 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;
    }
  • 相关阅读:
    package相关知识
    【算法设计与分析】5个数7次比较排序的算法
    Android下的应用编程——用HTTP协议实现文件上传功能
    5个数通过7次比较排序的方法
    数据库范式(1NF、2NF、3NF、BCNF)
    HttpDownloader2011年09月20日 写好用于下载的类 并且封装好
    POJ 1692 DP
    POJ 1682 多重DP
    TYVJ 1744 逆序对数(加强版)
    POJ 2151 概率DP
  • 原文地址:https://www.cnblogs.com/MeowMeowMeow/p/7794400.html
Copyright © 2020-2023  润新知