E - Cricket Field
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 greedy, that he would not listen to his Architect's proposals to build a field right in the park center with pleasant patterns of trees specially planted around and beautiful walks inside tree alleys for spectators. Instead, he ordered neither to cut nor to plant even a single tree in his park, but demanded to build the largest possible cricket field for his pleasure. If the Kind finds that the Architect has dared to touch even a single tree in his park or designed a smaller field that it was possible, then the Architect will loose his head. Moreover, he demanded his Architect to introduce at once a plan of the field with its exact location and size.
Your task is to help poor Architect to save his head, by writing a program that will find the maximum possible size of the cricket field and its location inside the park to satisfy King's requirements.
The task is somewhat simplified by the fact, that King's park has a rectangular shape and is situated on a flat ground. Moreover, park's borders are perfectly aligned with North-South and East-West lines. At the same time, royal cricket is always played on a square field that is also aligned with North-South and East-West lines. Architect has already established a Cartesian coordinate system and has precisely measured the coordinates of every tree. This coordinate system is, of course, aligned with North-South and East-West lines. Southwestern corner of the park has coordinates (0, 0) and Northeastern corner of the part has coordinates (W, H), where W and H are the park width and height in feet respectively.
For this task, you may neglect the diameter of the trees. Trees cannot be inside the cricket field, but may be situated on its side. The cricket field may also touch park's border, but shall not lie outside the park.
Input
The input begins with a single positive integer on a line by itself indicating the number of the cases following, each of them as described below. This line is followed by a blank line, and there is also a blank line between two consecutive inputs.
The first line of the input file contains three integer numbers N, W, and H, separated by spaces. N ( 0N
100) is the number of trees in the park. W and H ( 1
W, H
10000) are the park width and height in feet respectively.
Next N lines describe coordinates of trees in the park. Each line contains two integer numbers Xi and Yi separated by a space ( 0Xi
W, 0
Yi
H) that represent coordinates of i-th tree. All trees are located at different coordinates.
Output
For each test case, the output must follow the description below. The outputs of two consecutive cases will be separated by a blank line.
Write to the output file a single line with three integer numbers P, Q, and L separated by spaces, where (P, Q) are coordinates of the cricket field Southwestern corner, and L is a length of its sides. If there are multiple possible field locations with a maximum size, then output any one.
Sample Input
1 7 10 7
3 2
4 2
7 0
7 3
4 5
2 4
1 7
Sample Output
4 3 4
Note: This is a sample input and output that corresponds to the park plan that is shown on the picture.
题意:给出一张二维图,上面有n个点,要求你找出一个最大的正方形,其中不能有点。
思路:解决这样的问题,当然是采用暴力的方法,可以这样,枚举这幅图的左区间 L 和右区间 R,如果这个区间之内没有点,那么就可以形成边长为min(R - L,h)的正方形了,如果有,那就从下至上考虑点的影响,每两个点之间就形成了上下区间,不过不要忘记最上面的点与w形成的区间和0与最下面的点形成的区间。
应该要注意到n的数据范围是100,而w,h的数据范围是10000,所以你在枚举左右区间时应该要想到绝对不可能采用h
同样的可以去考虑点对于区间选取的影响,每两个点之间形成一个区间,还要考虑最左边的和最右边的区间
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define REP(i,n) for(int i=1;i<=n;i++)
#define M(a) memset(a,0,sizeof(a));
using namespace std;
const int maxn=+;
int n,w,h;
int idx[maxn];
struct node
{
int x,y;
bool operator < (const node & a) const
{
if(x!=a.x) return x<a.x;
return y<a.y;
}
} eve[maxn]; void Init()
{
M(idx);
scanf("%d%d%d",&n,&w,&h);
eve[].x=,eve[].y=;
idx[]=;
idx[n+]=h; //idx的初始化很重要,是枚举的基础
eve[n+].x=w;
eve[n+].y=h;//同时也必须假设(0,0)和(w,h)各有一点
REP(i,n)
{
scanf("%d%d",&eve[i].x,&eve[i].y);
idx[i]=eve[i].y;
}
} void Work()
{
int ansx=,ansy=,anslen=;
sort(eve+,eve+n+);
sort(idx+,idx+n+);
for(int i=; i<=n; i++)
for(int j=i+; j<=n+; j++)
{
int l=idx[i],r=idx[j],down=,up,ww,hh;
ww=r-l;
for(int k=; k<=n; k++)
{
if(eve[k].y>l&&eve[k].y<r)
{
hh=eve[k].x-down;
if(anslen<min(ww,hh))
{
anslen=min(ww,hh);
ansx=l;
ansy=down;
}
down=eve[k].x;
}
}
hh=w-down;
if(anslen<min(ww,hh))
{
anslen=min(hh,ww);
ansx=l;
ansy=down;
}
}
printf("%d %d %d\n",ansy,ansx,anslen);
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
Init();
Work();
if(T) puts("");
}
return ;
}
自然也可以以上下界做枚举,不过一定要清楚输入给出的是x,y坐标,你用x,y却是把它看做行与列,完全不同啊
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=;
struct node
{
int x,y;
bool operator < (const node & a) const
{
return y<a.y;
}
} eve[maxn]; int idx[maxn]; int main()
{
int T;
cin>>T;
while(T--)
{
int n,w,h;
cin>>n>>w>>h;
eve[].x=;idx[]=;
eve[].y=;
for(int i=; i<=n; i++) {cin>>eve[i].y>>eve[i].x;idx[i]=eve[i].x;} //输入的y坐标是行,x坐标是列
eve[n+].x=h;idx[n+]=h;
eve[n+].y=w;
sort(eve+,eve+n+);
sort(idx+,idx+n+);
int maxlen=,maxx=,maxy=;
for(int i=; i<=n+; i++)
for(int j=i+; j<=n+; j++)
{
int down=idx[i],up=idx[j],l=,hi,wi;
hi=up-down;
//cout<<hi<<" "<<idx[i]<<" "<<idx[j]<<endl;
for(int k=;k<=n;k++)
{
if(eve[k].x<=down||eve[k].x>=up) continue;
wi=eve[k].y-l;
if(maxlen<min(wi,hi))
{
maxlen=min(wi,hi);
maxx=down;
maxy=l;
}
l=eve[k].y;
}
wi=w-l;
if(maxlen<min(wi,hi))
{
maxlen=min(wi,hi);
maxx=down;
maxy=l;
}
}
cout<<maxy<<" "<<maxx<<" "<<maxlen<<endl;
if(T) puts("");
}
return ;
}
E - Cricket Field的更多相关文章
- Codeforces Gym 100002 C "Cricket Field" 暴力
"Cricket Field" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1000 ...
- UVa 1312 Cricket Field (枚举+离散化)
题意:在w*h的图上有n个点,要求找出一个正方形面积最大,且没有点落在该正方形内部. 析:枚举所有的y坐标,去查找最大矩形,不断更新. 代码如下: #include <cstdio> #i ...
- UVA 1312 Cricket Field
题意: 在w*h的坐标上给n个点, 然后求一个最大的矩形,使得这个矩形内(不包括边界)没有点,注意边界上是可以有点的. 分析: 把坐标离散化.通过两重循环求矩形的高,然后枚举,看是否能找到对应的矩形. ...
- UVA-1312 Cricket Field (技巧枚举)
题目大意:在一个w*h的网格中,有n个点,找出一个最大的正方形,使得正方形内部没有点. 题目分析:寻找正方形实质上等同于寻找矩形(只需令长宽同取较短的边长).那么枚举出所有可能的长宽组合取最优答案即可 ...
- 【习题 8-19 UVA-1312】Cricket Field
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 添加两个y坐标0和h 然后从这n+2个y坐标中任选两个坐标,作为矩形的上下界. 然后看看哪些点在这个上下界中. 定义为坐标集合S S ...
- 【uva 1312】Cricket Field(算法效率--技巧枚举)
题意:一个 L*R 的网格里有 N 棵树,要求找一个最大空正方形并输出其左下角坐标和长.(1≤L,R≤10000, 0≤N≤100) 解法:枚举空正方形也就是枚举空矩阵,先要固定一个边,才好继续操作. ...
- UVA1616-Caravan Robbers(枚举)
Problem UVA1616-Caravan Robbers Accept: 160 Submit: 1156Time Limit: 3000 mSec Problem Description O ...
- WC2021 题目清单
Day2 上午 <IOI题型与趣题分析> 来源 题目 完成情况 备注 IOI2002 Day1T1 Frog 已完成 IOI2002 Day1T2 Utopia IOI2002 Day1T ...
- salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)
本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...
随机推荐
- Linux 上安装 Node.js
Linux 上安装 Node.js 直接使用已编译好的包(在个人阿里云服务器47.100.6.106上安装) Node 官网已经把 linux 下载版本更改为已编译好的版本了,我们可以直接下载解压后使 ...
- 技嘉,u盘安装win7,提示“找不到驱动器设备驱动程序”
错误图: 解决办法: 网上说什么换usb2.0,修复用命令启动芸芸,反正对我来说没发现有什么卵用 详细步骤: 点击进入详细步骤页面地址
- 1617: [Usaco2008 Mar]River Crossing渡河问题(dp)
1617: [Usaco2008 Mar]River Crossing渡河问题 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1219 Solved: ...
- centos 重装docker
docker应该是root用户来使用,因为他连接了底层!!!以下操作默认是root用户来操作的 停止所有正在运行的容器: docker stop $(docker ps -a -q) 删除所有的容器c ...
- 组合数学题 Codeforces Round #108 (Div. 2) C. Pocket Book
题目传送门 /* 题意:每一次任选i,j行字符串进行任意长度前缀交换,然后不断重复这个过程,问在过程中,第一行字符串不同的个数 组合数学题:每一列不同的字母都有可能到第一行,所以每列的可能值相乘取模就 ...
- Hadoop Hive概念学习系列之hive的索引及案例(八)
hive里的索引是什么? 索引是标准的数据库技术,hive 0.7版本之后支持索引.Hive提供有限的索引功能,这不像传统的关系型数据库那样有“键(key)”的概念,用户可以在某些列上创建索引来加速某 ...
- Selenium Grid操作使用指南
一.实现串行多浏览器执行脚本1.启动selenium-server-standalonejava -jar selenium-server-standalone-2.44.0.jar2.脚本代码 fr ...
- dede手机端首页点击文章内容、列表,却跳到pc端
手机访问到手机端首页,点击列表.内容.图片等都跳到pc端,是什么原因? 查看m模板里面的index.html文件生成的代码是绝对路径(数字随机)13.html 而不是view.php?aid=13 解 ...
- sql server nullif的使用技巧,除数为零的处理技巧
在sql server中做除法处理的时候,我们经常需要处理除数为零的情况,因为如果遇到这种情况的时候,sqlserver会抛出遇到以零作除数错误的异常,我们总不希望把这个异常显示给用户吧. 做个会报这 ...
- zabbix---简介
zabbix---简介 今天又听人说zabbix,好吧特地回来看了看,和其他的好像差别也不大,不过他可以让监控,绘图,web前端与一体, 当然也可以实现分布式部署,不错的. 列举一下其功能特点 网络设 ...