zoukankan      html  css  js  c++  java
  • bzoj4232: [Neerc2011 Northern]Kids Like Cakes

    Description

    给定一个n个点的严格凸多边形(各个内角<180°),现在要切出两个非退化三角形(三点不共线),要求两个三角形顶点必须是凸多边形的顶点,且三角形不可相交(但是点或边可以重合)。求两个三角形面积之差的最大值。

    Input

    第一行,一个整数N。
    第二到N+1行,每行两个整数xi,yi,表示多边形的一个点,保证顶点按顺时针或逆时针顺序给出。

    Output

    输出答案,精确到小数点后1位。
    最小三角形一定是相邻三点构成,因此只需枚举每个最小三角形,查询剩余部分中的最大三角形
    dp,f[a][b]表示三角形一条边从a到b的,另一个顶点c在a到b之间的最大面积,固定a,令b递增则决策点c可以线性求出
    辅助g[a][b]=max(g[a][b-1],g[a+1][b],f[a][b])可支持查询
    #include<bits/stdc++.h>
    typedef long long i64;
    struct pos{int x,y;}ps[10007];
    pos operator+(pos a,pos b){return (pos){a.x+b.x,a.y+b.y};}
    pos operator-(pos a,pos b){return (pos){a.x-b.x,a.y-b.y};}
    i64 operator*(pos a,pos b){return i64(a.x)*b.y-i64(a.y)*b.x;}
    int n,ws[5007];
    i64 ans=0,s0[5007],ms[5007];
    void maxs(i64&a,i64 b){if(a<b)a=b;}
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;++i)scanf("%d%d",&ps[i].x,&ps[i].y);
        if((ps[2]-ps[1])*(ps[3]-ps[1])<0)std::reverse(ps+1,ps+n+1);
        ps[n*2+1]=ps[1];
        ps[0]=ps[n];
        for(int i=1;i<=n;++i)ps[n+i]=ps[i],ws[i]=i;
        for(int d=3;d<n;++d){
            for(int l=1,r=d;l<=n;++l,++r){
                pos a=ps[r]-ps[l];
                s0[l]=(ps[ws[l]]-ps[l])*a;
                while(ws[l]+1<r){
                    i64 s1=(ps[ws[l]+1]-ps[l])*a;
                    if(s1<s0[l])break;
                    ++ws[l];
                    s0[l]=s1;
                }
                maxs(ms[l],s0[l]);
            }
            ms[n+1]=ms[1];
            for(int l=1;l<=n;++l)maxs(ms[l],ms[l+1]);
        }
        for(int l=1,r=n-1;l<=n;++l,++r)maxs(ans,ms[l]-(ps[r]-ps[l])*(ps[r+1]-ps[l]));
        printf("%lld.%lld
    ",ans/2,ans%2*5);
        return 0;
    }
  • 相关阅读:
    涡轮增压中冷器
    TortoiseSVN文件及文件夹图标不显示解决方法
    无线路由器无法登录管理界面,怎么办?
    TP-LINK-TL-WVR450G路由器经常断网
    阿里云DNS地址
    农村社保和职工社保能同时交吗?
    电视机顶盒遥控器可以同时遥控电视和机顶盒
    各种汽车的高端品牌
    金蝶云星空系统打印提示:对象不支持“SetGraphicsMode”属性或方法
    怎么去掉视频的背景音乐?
  • 原文地址:https://www.cnblogs.com/ccz181078/p/7129145.html
Copyright © 2011-2022 走看看