题意:一个 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(算法效率--技巧枚举)的更多相关文章

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

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

  2. UVA 1312 Cricket Field

    题意: 在w*h的坐标上给n个点, 然后求一个最大的矩形,使得这个矩形内(不包括边界)没有点,注意边界上是可以有点的. 分析: 把坐标离散化.通过两重循环求矩形的高,然后枚举,看是否能找到对应的矩形. ...

  3. 【uva 1617】Laptop(算法效率--贪心,2种理解)

    题意:有N条长度为1的线段,要求使每条线段分别在相应区间,且"空隙"数目最小.输出"空隙"数.(1≤N≤100000) 解法:(P.S.我这题竟做了2个多小时, ...

  4. 【uva 1615】Highway(算法效率--贪心 区间选点问题)

    题意:给定平面上N个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个店,都有一个选出的点离它的欧几里德距离不超过D. 解法:先把问题转换成模型,把对平面的点满足条件的点在x轴的直线上可得到 ...

  5. Codeforces Gym 100002 C "Cricket Field" 暴力

    "Cricket Field" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1000 ...

  6. E - Cricket Field

    Description   Once upon a time there was a greedy King who ordered his chief Architect to build a fi ...

  7. 关于贪心算法的经典问题(算法效率 or 动态规划)

    如题,贪心算法隶属于提高算法效率的方法,也常与动态规划的思路相挂钩或一同出现.下面介绍几个经典贪心问题.(参考自刘汝佳著<算法竞赛入门经典>).P.S.下文皆是我一个字一个字敲出来的,绝对 ...

  8. SQL Server 聚合函数算法优化技巧

    Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...

  9. 提高php编程效率技巧

    提高php编程效率技巧 投稿:mrr 字体:[增加 减小] 类型:转载 时间:2015-08-13   php是全球范围应用范围最广的开发语言,php和linux.apache.mysql紧密结合,形 ...

随机推荐

  1. Navcat连接Mysql报错1521

    原因是新版的MySql密码加密算法改变,导致旧版本的Navcat连接报错. 解决方案: 1.升级Navcat 因为只是本地的Mysql,所以没验证这个方法,网传可以,此处不介绍. 2.修改Mysql加 ...

  2. 工具用的好,下班回家早!5分钟玩转iTerm2!

    同时打开多个终端窗口,来回切换太麻烦! 能不能像IDEA一样,能够查看历史粘贴记录? 有没有办法一键登陆服务器? 工欲善其事,必先利其器!无论工作还是学习,选择好用的工具真的太重要了.今天就给大家介绍 ...

  3. Redis-4.X 版本 Redis Cluster集群 (一)

    一 创建redis cluster 集群前提条件: 1 ) 每个redis node 节点采用相同的硬件配置,相同的密码. 2 ) 每个节点必须开启的参数: cluster-enabled yes # ...

  4. 创建Django REST framework工程

    1.创建工程虚拟环境 2.创建工程目录和调整目录结构: 创建Django的项目 创建docs 用于存放一些说明文档资料 创建scripts 用于存放管理脚本文件 创建logs 用于存在日志 在与项目同 ...

  5. OpenCV 和 Dlib 人脸识别基础

    00 环境配置 Anaconda 安装 1 下载 https://repo.anaconda.com/archive/ 考虑到兼容性问题,推荐下载Anaconda3-5.2.0版本. 2 安装 3 测 ...

  6. 本地Mac通过堡垒机代理实现跨堡垒机scp问题

    近日,公司在跳板机前架设了堡垒机,以防止ssh攻击,但这带来一个问题,我们平常直接ssh跳板机,可以直接使用scp来上传或下载跳板机数据到本地 架设堡垒之后经常使用的scp工具不好用了 于是本期就来解 ...

  7. Markdown 编辑器+同步预览+文件笔记管理+静态博客 metadata 管理

    Leanote: 1. 笔记管理, 支持富文本, markdown, 写作模式.... 编辑器绝对好用. 另外特意为coder制作了一个贴代码的插件, 真是太贴心(因为作者也是coder) 2. 博客 ...

  8. 解读腾讯敏捷研发核心驱动力 腾讯TAPD TAPD 2020-12-17

    解读腾讯敏捷研发核心驱动力 腾讯TAPD TAPD 2020-12-17

  9. 语言反射规则 - The Laws of Reflection

    [译]Go反射的三个原则(官方博客) | seven的分享 https://sevenyu.top/2019/12/21/laws-of-reflection.html wilhg/The-Laws- ...

  10. forEach、for in、for of三者区别

    forEach更多的用来遍历数组for in 一般常用来遍历对象或jsonfor of数组对象都可以遍历,遍历对象需要通过和Object.keys()for in循环出的是key,for of循环出的 ...