【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紧密结合,形 ...
随机推荐
- springboot异常处理之404
ps: 推荐一下本人的通用后台管理项目crowd-admin 以及newbee-mall增强版,喜欢的话给个star就好 源码分析 在springboot中默认有一个异常处理器接口ErrorConto ...
- LeetCode105 从前序和中序序列构造二叉树
题目描述: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9 ...
- 剑指offer 面试题9:用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部.pop() -- 从队列首部移 ...
- Tengine 四层代理:
Tengine 四层代理: 1 ) 安装tengine ( nginx1.9 以上版本 编译以后要支持stream 模块) 1.1 ) tengine(nginx) 一定要是nginx-1.9.X 以 ...
- 数学建模学习笔记 | matlab基本命令及用法
前言 数学建模对matlab水平的要求 了解matlab的基本用法,如常用命令.脚本结构.矩阵的基本操作.绘图等: 熟悉matlab的程序结构,能创建和引用函数: 熟悉常见模型的求解算法和套路: 自主 ...
- mac配置Android SDK
下载地址:http://tools.android-studio.org/index.php/sdk 2.找到tools文件夹 选中android-sdk-macosx包下的tools文件夹,按com ...
- Spring Boot 2.x基础教程:配置元数据的应用
在使用Spring Boot开发应用的时候,你是否有发现这样的情况:自定义属性是有高量背景的,鼠标放上去,有一个Cannot resolve configuration property的配置警告. ...
- 把vscode打造成技术写作神器
作为技术开发,大家平时肯定需要记录技术笔记.甚至有的同学还开通可自己的技术博客或者技术公众号进行创作. 这个时候有套趁手的写作工具尤为重要,节省下时间好好休息一下,对于咱们程序员来说更加重要.因为最近 ...
- Ubuntu安装Vivado
Step1 安装必要的库文件: sudo apt install libncurses5 build-essential openjdk-11-jdk Step2 进入vivado的安装文件夹 sud ...
- kettle 连接oracle12c问题解决办法:
在oracle的安装文件目录......\NETWORK\ADMIN\sqlnet.ora 文件中添加该语句:SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8window ...