zoukankan      html  css  js  c++  java
  • UVA 1312 Cricket Field

    题意:

      在w*h的坐标上给n个点, 然后求一个最大的矩形,使得这个矩形内(不包括边界)没有点,注意边界上是可以有点的。

    分析:

      把坐标离散化。通过两重循环求矩形的高,然后枚举,看是否能找到对应的矩形。

    代码:

      

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    const int maxn=120;
    int n,w,h;
    int d[maxn];
    struct Node
    {
    int x,y;
    bool operator < (const Node &a) const
    {
    if(x==a.x)
    return y<a.y;
    return x<a.x;
    }
    };
    Node node[maxn];
    void solve()
    {
    sort(node+1,node+n+1);
    sort(d,d+n+2);
    int ans=0;
    int ansx,ansy;
    int i,j,k;
    for(i=0;i<=n+1;i++)
    {
    for(j=i+1;j<=n+1;j++)
    {
    int high=d[j],low=d[i],temp=0,r=high-low,c;
    for(k=1;k<=n;k++)
    {
    if(node[k].y<=low||node[k].y>=high)
    continue;
    c=node[k].x-temp;
    if(ans<min(r,c))
    {
    ans=min(r,c);
    ansx=temp;
    ansy=low;
    }
    temp=node[k].x;
    }
    c=w-temp;
    if(ans<min(r,c))
    {
    ans=min(r,c);
    ansx=temp;
    ansy=low;
    }
    }
    }
    printf("%d %d %d ",ansx,ansy,ans);
    }
    int main()
    {
    int cas;
    int flag=1;
    scanf("%d",&cas);
    while(cas--)
    {
    scanf("%d%d%d",&n,&w,&h);
    d[0]=0;
    d[n+1]=h;
    int i;
    for(i=1;i<=n;i++)
    {
    scanf("%d%d",&node[i].x,&node[i].y);
    d[i]=node[i].y;
    }
    solve();
    if(cas!=0)
    printf(" ");
    }
    }
  • 相关阅读:
    a Makefile
    Fedora的一些个人配置
    开机默认命令行
    挂载iso文件
    Vi不显示insert
    beego 框架基本使用 && 知识点整理
    kafka的安装及使用(单节点)
    Go 实现短 url 项目
    晓看天色暮看云,铁马冰河入梦来
    Go net/http,web server
  • 原文地址:https://www.cnblogs.com/137033036-wjl/p/4934127.html
Copyright © 2011-2022 走看看