【uva 1312】Cricket Field(算法效率--技巧枚举)
题意:一个 L*R 的网格里有 N 棵树,要求找一个最大空正方形并输出其左下角坐标和长。(1≤L,R≤10000, 0≤N≤100)
解法:枚举空正方形也就是枚举空矩阵,先要固定一个边,才好继续操作。(P.S.许多类型的题都是这样:先固定一个变量,再比较另外的变量。也就是我之前提到过的“部分枚举”。这种思想在贪心、DP等都常出现,一定要掌握!)所以这题就是先枚举一条边的范围(横坐标),再枚举排序后的点,根据当前枚举的点和之前纵坐标最大的点的纵坐标得到这条边的长度,再比较、更新答案。
P.S.我这题打了2个小时!˚‧º·(˚ ˃̣̣̥᷄⌓˂̣̣᷅ )‧º·˚ 一定要注意细节啊!还有......我的行列是与题目相反着存的。
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<algorithm>
5 #include<iostream>
6 using namespace std;
7
8 const int N=110,D=10010;
9 int n,l,r,m;
10 struct node{int x,y;}a[N];
11 int b[N];
12
13 int mmin(int x,int y) {return x<y?x:y;}
14 int mmax(int x,int y) {return x>y?x:y;}
15 bool cmp(node x,node y)
16 {
17 if (x.y!=y.y) return x.y<y.y;
18 return x.x<y.x;
19 }
20 int main()
21 {
22 int T;
23 scanf("%d",&T);
24 while (T--)
25 {
26 scanf("%d%d%d",&n,&r,&l);
27 m=1; b[1]=0;
28 for (int i=1;i<=n;i++)
29 {
30 scanf("%d%d",&a[i].y,&a[i].x);//
31 b[++m]=a[i].x;
32 }
33 b[++m]=l;//没有+1...
34 sort(a+1,a+1+n,cmp);
35 sort(b+1,b+1+m);
36 int p=1;
37 for (int i=2;i<=m;i++)
38 if (b[i]!=b[i-1]) b[++p]=b[i];
39 m=p;
40
41 int tx=0,ty=0,ans=0;
42 for (int i=1;i<=m;i++)
43 for (int j=i+1;j<=m;j++)
44 {
45 int mxy=0,tmp;
46 for (int k=1;k<=n;k++)
47 {
48 if (a[k].x<b[i]||a[k].x>b[j]) continue;//别轻易break
49 tmp=mmin(b[j]-b[i],a[k].y-mxy);
50 if (tmp>ans) {ans=tmp; tx=b[i]; ty=mxy;}
51 if (a[k].x!=b[i] && a[k].x!=b[j]) mxy=a[k].y;
52 }
53 tmp=mmin(b[j]-b[i],r-mxy);//边界勿漏
54 if (tmp>ans) {ans=tmp; tx=b[i]; ty=mxy;}
55 }
56 printf("%d %d %d\n",ty,tx,ans);
57 if (T) printf("\n");
58 }
59 return 0;
60 }
【uva 1312】Cricket Field(算法效率--技巧枚举)的更多相关文章
- UVa 1312 Cricket Field (枚举+离散化)
题意:在w*h的图上有n个点,要求找出一个正方形面积最大,且没有点落在该正方形内部. 析:枚举所有的y坐标,去查找最大矩形,不断更新. 代码如下: #include <cstdio> #i ...
- UVA 1312 Cricket Field
题意: 在w*h的坐标上给n个点, 然后求一个最大的矩形,使得这个矩形内(不包括边界)没有点,注意边界上是可以有点的. 分析: 把坐标离散化.通过两重循环求矩形的高,然后枚举,看是否能找到对应的矩形. ...
- 【uva 1617】Laptop(算法效率--贪心,2种理解)
题意:有N条长度为1的线段,要求使每条线段分别在相应区间,且"空隙"数目最小.输出"空隙"数.(1≤N≤100000) 解法:(P.S.我这题竟做了2个多小时, ...
- 【uva 1615】Highway(算法效率--贪心 区间选点问题)
题意:给定平面上N个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个店,都有一个选出的点离它的欧几里德距离不超过D. 解法:先把问题转换成模型,把对平面的点满足条件的点在x轴的直线上可得到 ...
- Codeforces Gym 100002 C "Cricket Field" 暴力
"Cricket Field" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1000 ...
- E - Cricket Field
Description Once upon a time there was a greedy King who ordered his chief Architect to build a fi ...
- 关于贪心算法的经典问题(算法效率 or 动态规划)
如题,贪心算法隶属于提高算法效率的方法,也常与动态规划的思路相挂钩或一同出现.下面介绍几个经典贪心问题.(参考自刘汝佳著<算法竞赛入门经典>).P.S.下文皆是我一个字一个字敲出来的,绝对 ...
- SQL Server 聚合函数算法优化技巧
Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...
- 提高php编程效率技巧
提高php编程效率技巧 投稿:mrr 字体:[增加 减小] 类型:转载 时间:2015-08-13 php是全球范围应用范围最广的开发语言,php和linux.apache.mysql紧密结合,形 ...
随机推荐
- Docker-ce Centos8 笔记一:安装Docker-ce
Docker是一个建设企业及数据中心服务仓库的进程,通过裸金属机和虚拟机承载的MAC.windows和linux系统提供本地和远程软件服务,涉及应用软件镜像.系统镜像.虚拟化仓库(虚拟机).它承载着灵 ...
- 《犬夜叉2021》我想通过Binder找到你
前言 本故事纯属虚构,如有不通顺的逻辑请轻喷.️ <犬夜叉2021> 第一章:我还能找到你吗,阿篱 犬夜叉和奈落大决战之后,四魂之玉.食骨之井消失,谁也不知道去了哪,而犬夜叉和阿篱再次被分 ...
- Hadoop源码:namenode格式化和启动过程实现
body { margin: 0 auto; font: 13px / 1 Helvetica, Arial, sans-serif; color: rgba(68, 68, 68, 1); padd ...
- Linux 使用命令行上传下载文件
基本语法: 服务器: 用户名@ip:/路径 scp 要拷贝的文件 要存放的文件 上传文件到服务器 # 把本地 source.md 文件上传到 152.116.113.13 服务器的/home目录 # ...
- linux硬盘分区和fdisk命令
分区的几个概念 硬盘分区有三种,主分区.扩展分区.逻辑分区.一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个.且主分区+扩展分区总共不能超过4个.逻辑分区可以有若干个.在windows下 ...
- 【ORA】ORA-27125:unable to create shared memory segment
在安装Oracle 10g的时候出现一个了错误,在网上总结了一下大牛写的文章 ORA-27125:unable to create shared memory segment 安装时出现这个错误安装会 ...
- Java中的NIO进阶
目录 前言 NIO与多线程 Readable和Writeable的空触发 请求与返回的处理 事件的处理机制 NIO多线程使用的一个例子 前言 之前一篇文章简单介绍了NIO,并附了一个简单的例子,但是自 ...
- kafka(三)原理剖析
一.生产者消息分区机制原理剖析 在使用Kafka 生产和消费消息的时候,肯定是希望能够将数据均匀地分配到所有服务器上.比如很多公司使用 Kafka 收集应用服务器的日志数据,这种数据都是很多的,特别是 ...
- ElasticSearch-命令行客户端操作
1.引言 实际开发中,主要有三种方式可以作为elasticsearch服务的客户端: 第一种,elasticsearch-head插件(可视化工具) 第二种,使用elasticsearch提供的Res ...
- ES6在工作中会用到的核心知识点讲解
一.var, let, const 谈到ES6,估计大家首先肯定会想到var,let,const 咱就先谈谈这三者的区别 var a = 3; { var a = 4; } console.log(a ...