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\n",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("\n");    }}
时间: 2024-10-07 06:13:48

UVA 1312 Cricket Field的相关文章

UVA - 1312 Cricket Field 构造

题目大意:在一个W * H的网格中有n棵树,要求你在这个网格中找出最大个的一个正方形,这个正方形内部不能有树,边上可以有树 解题思路:刚开始以为要暴力枚举每一个点,结果发现错了,其实这题就像UVA - 1382 Distant Galaxy这题一样,只不过这个是要找正方形,找正方形和找矩形类似,只需要取矩形的最小边就可以了 #include<cstdio> #include<algorithm> using namespace std; #define maxn 110 struc

UVa 1312 Cricket Field (枚举+离散化)

题意:在w*h的图上有n个点,要求找出一个正方形面积最大,且没有点落在该正方形内部. 析:枚举所有的y坐标,去查找最大矩形,不断更新. 代码如下: #include <cstdio> #include <string> #include <cstdlib> #include <cmath> #include <iostream> #include <cstring> #include <set> #include <

1312 - Cricket Field

该题的网格大小非常大,看似需要离散化,但是实际上是不需要的 .  因为我们可以发现,既然要求正方形里没有树,我们不妨直接枚举树就可以了 . 所以我们将纵坐标单独拿出来从小到大排序,二重循环就可以枚举出矩形上下界,然后关键是横坐标的枚举. 同样,我们将横坐标排序,然后判断对应的纵坐标是否在上下界范围内,通过观察,如果不在,那么这个点将不在当前枚举的矩形中,所以直接跳过就可以了,这样的话,我们只需要一个变量来动态维护左边界就可以了 . 细节 参见代码: #include<bits/stdc++.h>

UVA 10458 - Cricket Ranking(容斥原理)

UVA 10458 - Cricket Ranking 题目链接 题意:给定k个区间,要求用这些数字范围去组合成n,问有几种组合方式 思路:容斥原理,容斥是这样做:已知n个组成s,不限值个数的话,用隔板法求出情况为C(s + n - 1, n - 1),但是这部分包含了超过了,那么就利用二进制枚举出哪些是超过的,实现把s减去f(i) + 1这样就保证这个位置是超过的,减去这部分后,有多减的在加回来,这就满足了容斥原理的公式,个数为奇数的时候减去,偶数的时候加回 代码: #include <cst

uva 10458 - Cricket Ranking(容斥+高精度)

题目连接:uva 10458 - Cricket Ranking 题目大意:给定k和n,表示有k个比赛,总共要的n分,每个比赛可以得l~r的分数,问说可以有多少种得分方式. 解题思路:容斥,可以参考Codeforces 451E. #include <cstdio> #include <cstring> #include <iostream> using namespace std; typedef long long ll; const int MAXN = 1005

Codeforces Gym 100002 C &quot;Cricket Field&quot; 暴力

"Cricket Field" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100002 Description Once upon a time there was a greedy King who ordered his chief Architect to build a field for royal cricket inside his park. The King was so

【uva 1312】Cricket Field(算法效率--技巧枚举)

题意:一个 L*R 的网格里有 N 棵树,要求找一个最大空正方形并输出其左下角坐标和长.(1≤L,R≤10000, 0≤N≤100) 解法:枚举空正方形也就是枚举空矩阵,先要固定一个边,才好继续操作.(P.S.许多类型的题都是这样:先固定一个变量,再比较另外的变量.这种思想在贪心.DP等都常出现,一定要掌握!)所以这题就是先枚举一条边的范围(横坐标),再枚举排序后的点,根据当前枚举的点和之前纵坐标最大的点的纵坐标得到这条边的长度,再比较.更新答案. P.S.我这题打了2个小时!??º·(? ??

UVA 11982 Fantasy Cricket

https://vjudge.net/problem/UVA-11982 题意: 给出一个包含’U’, ‘D’, ‘E’的字符串, ’U’ 表示需要把这个字符向后移动, ’D’表示需要把这个字符向前移动, ’E’表示这个字符不移动, 求移动方案 ‘U’和‘D’都需要把这个字符拿起 dp[i][j] 表示前i个字符中,有j个‘U’还没放下的方案数 如果第i个是‘U’,那么这个‘U’必须拿走, 这个位置可以暂时空着,由dp[i-1][j-1]转移 这个位置可以从之前没有放下的'U'里选一个放下,由d

UVa 133 The Dole Queue

 The Dole Queue  In a serious attempt to downsize (reduce) the dole queue, The New National Green Labour Rhinoceros Party has decided on the following strategy. Every day all dole applicants will be placed in a large circle, facing inwards. Someone i