zoukankan      html  css  js  c++  java
  • sdut 2401 最大矩阵面积 夜

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2401

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;

    const int N=1010;
    struct node
    {
        int x,y;
    }mem[N];
    bool cmp(node a,node b)
    {
        if(a.x==b.x)
        return a.y<b.y;
        return a.x<b.x;
    }
    bool cmp1(node a,node b)
    {
        if(a.y==b.y)
        return a.x<b.x;
        return a.y<b.y;
    }
    int main()
    {
        //freopen("data.txt","r",stdin);
        int T;
        int L,W,Point;
        cin>>T;
        while(T--)
        {
            cin>>L>>W;
            mem[0].x=0;mem[0].y=0;
            mem[1].x=0;mem[1].y=W;
            mem[2].x=L;mem[2].y=0;
            mem[3].x=L;mem[3].y=W;
            cin>>Point;
            for(int i=4;i<4+Point;++i)
            {
               cin>>mem[i].x>>mem[i].y;
            }
            sort(mem,mem+Point+4,cmp);
            int ans=0;
            for(int i=0;i<Point+4;++i)
            {
                for(int j=i+1,low=0,high=W,Maxl=L-mem[i].x;j<Point+4;++j)
                {
                    if(mem[j].y<=high&&mem[j].y>=low)
                    {
                        ans=max(ans,(high-low)*(mem[j].x-mem[i].x));
                        if(mem[j].y==mem[i].y)
                        break;
                        if(mem[j].y<mem[i].y)
                        low=mem[j].y;
                        else
                        high=mem[j].y;
                        if((high-low)*Maxl<=ans)
                        break;
                    }
                }
            }
            sort(mem,mem+Point+4,cmp1);
            for(int i=0;i<Point+4;++i)
            {
                for(int j=i+1,low=0,high=L,Maxl=W-mem[i].y;j<Point+4;++j)
                {
                    if(mem[j].x<=high&&mem[j].x>=low)
                    {
                        ans=max(ans,(high-low)*(mem[j].y-mem[i].y));
                        if(mem[j].x==mem[i].x)
                        break;
                        if(mem[j].x<mem[i].x)
                        low=mem[j].x;
                        else
                        high=mem[j].x;
                        if((high-low)*Maxl<=ans)
                        break;
                    }
                }
            }
            cout<<ans<<endl;
        }
        return 0;

    }

  • 相关阅读:
    Win7 usb无法识别,感叹号,没有盘符
    MVMM 中的ViewModel 实现IsLoading进度条
    菜鸟喜欢的C# 入门认识和添加,修改,删除 文件夹 文件 大全(转)
    (转)windows负载平衡
    关于刷新页面和用法.(转)
    bat文件调用dos命令 (dos淘金)
    flash新闻轮转:图片和链接从数据库读取之我见
    dling 624+and 2100ap && wireless card&wifi
    html与css小技巧
    小型系统数据库安全小结
  • 原文地址:https://www.cnblogs.com/liulangye/p/2467012.html
Copyright © 2011-2022 走看看