【uva 1617】Laptop(算法效率--贪心,2种理解)
题意:有N条长度为1的线段,要求使每条线段分别在相应区间,且“空隙”数目最小。输出“空隙”数。(1≤N≤100000)
解法:(P.S.我这题竟做了2个多小时,还是有点迷糊......ヽ(≧□≦)ノ)先按右端点从小到大排序,再是左端点。于是有2个理解:
1. 扫一遍,r保存之前的线段的右端点的最大值,分情况讨论;
2. (这个我理解了差不多1个小时......qwq 于是我好不容易理解了之后,再进行了一些小修改。)l , r 表示之前线段左、右端点的范围。再分别看没有“空隙”地加入当前线段的左、右端点的限制条件,若l+1>r,就说明这样不合法,便一定会有“空隔”。那便cnt++,并且最优化加入后当前的答案。
注意——许多贪心题都是排序后比较相邻两个的。比如我里面写的一些“区间相关问题”—— 关于贪心算法的经典问题(算法效率 or 动态规划)。
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 7 const int N=100010; 8 int n; 9 struct node{int l,r;}a[N]; 10 11 bool cmp(node x,node y) 12 { 13 if (x.r!=y.r) return x.r<y.r; 14 return x.l<y.l; 15 } 16 int main() 17 { 18 int T; 19 scanf("%d",&T); 20 while (T--) 21 { 22 scanf("%d",&n); 23 for (int i=1;i<=n;i++) scanf("%d%d",&a[i].l,&a[i].r); 24 sort(a+1,a+1+n,cmp); 25 int r=a[1].r,cnt=0; 26 for (int i=2;i<=n;i++) 27 //r为上一个线段能处于的最靠右的位置 28 if (r!=a[i].r) 29 { 30 if (r<a[i].l) cnt++,r=a[i].r; 31 else r++; 32 } 33 printf("%d\n",cnt); 34 } 35 return 0; 36 }
Code1
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 7 const int N=100010; 8 int n; 9 struct node{int l,r;}a[N]; 10 11 int mmin(int x,int y) {return x<y?x:y;} 12 int mmax(int x,int y) {return x>y?x:y;} 13 bool cmp(node x,node y) 14 { 15 if (x.r!=y.r) return x.r<y.r; 16 return x.l<y.l; 17 } 18 int main() 19 { 20 int T; 21 scanf("%d",&T); 22 while (T--) 23 { 24 scanf("%d",&n); 25 for (int i=1;i<=n;i++) scanf("%d%d",&a[i].l,&a[i].r); 26 sort(a+1,a+1+n,cmp); 27 int l=a[1].l,r=a[1].r,cnt=0; 28 for (int i=2;i<=n;i++) 29 { 30 l=mmax(l+1,a[i].l),r=mmin(r+1,a[i].r); 31 if (l+1>r) 32 { 33 cnt++; 34 l=a[i].l,r=a[i].r; 35 } 36 } 37 printf("%d\n",cnt); 38 } 39 return 0; 40 }
Code2
转载于:https://www.cnblogs.com/konjak/p/6055836.html
【uva 1617】Laptop(算法效率--贪心,2种理解)相关推荐
- 【uva 1614】Hell on the Markets(算法效率--贪心)
题意:有一个长度为N的序列A,满足1≤Ai≤i,每个数的正负号不知.请输出一种正负号的情况,使得所有数的和为0.(N≤100000) 解法:(我本来只想静静地继续做一个口胡选手...←_← 但是因为这 ...
- uva 1617——Laptop
题意:有n个长度为1的线段,确定它们的起点,使得第i个线段在[ri,di]之间,输出空隙数目的最小值. 思路:贪心.首先对区间进行排序,然后扫描一遍,当上一个线段最右边加1<=当前最左的点的时, ...
- UVa - 1617 - Laptop
还是贪心法. 把原始数据排序,排序的规则是先依照右端点排序,右端点同样的情况下,再依照左端点排序.然后最左边開始遍历线段,取第一个线段的右端点,推断是否和第二个线段的右端点相等.假设相等,肯定能够缩短 ...
- 数据结构和算法之常用 10 种算法
目录 1.二分查找算法(非递归) 2.分治算法 2.1分治算法最佳实践-汉诺塔 3.动态规划算法 4.KMP 算法 4.1KMP 算法最佳应用-字符串匹配问题 5.贪心算法 5.1贪心算法最佳应用-集 ...
- 第四课:算法效率的度量和存储空间需求
第四课 本课主题: 算法效率的度量和存储空间需求 教学目的: 掌握算法的渐近时间复杂度和空间复杂度的意义与作用 教学重点: 渐近时间复杂度的意义与作用及计算方法 教学难点: 渐近时间复杂度的意义 授课 ...
- 超摩尔定律!OpenAI官宣AI算法效率每16个月翻一番
OpenAI今天宣布将开始追踪机器学习模型的效率,并对AI算法演进的情况进行定量追踪,结果显示算法改进效率吊打摩尔定律. 为了启动这一进程,Open AI发表了一份分析报告,开篇即用数据展示了算法演进 ...
- 最短路径算法(一) Dijkstra算法(贪心算法)
Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题. 其基本原理是 ...
- prim算法_贪心算法详解(附例题)
贪心算法的特征规律 贪心算法,"贪心"二字顾名思义,因此其规律特征就是更加注重当前的状态,贪心法做出的选择是对于当前所处状态的最优选择,它的解决问题的视角是微观的"局部& ...
- 3.Python算法之贪心算法思想
贪心算法 1.什么是贪心算法 2.贪心算法的特点和思路 3.贪心算法的缺点 4.贪心算法的基本思路 5.贪心算法的基本过程 6.贪心算法解决"找零"问题 6.贪心算法解决" ...
最新文章
- Git 常用命令速查表(图文+表格)
- vue怎么运行html,怎样运行一个vue.js项目
- 将自己的类封装为lib的方法
- c语言线性表拷贝,数据结构(C语言版)---线性表顺序存储表示
- Integer注意_享元设计模式
- unity android 分包,Unity以分包(obb)形式集成到安卓原生 我慢慢填坑
- python中def root的用法_python scipy optimize.root_scalar用法及代码示例
- BZOJ2428[HAOI2006] 均分数据
- 融云server sdk java_开源项目索引
- 很多人问中国网络安全行业怎么样?这篇文看完让你彻底了解中国网络安全行业的全景
- 如何在windows10系统将用户名改为英文
- 通用24CXXX读写程序(GCC),兼容24C系列存储器(24C01到24C1024),支持跨器件跨页读写,支持连续
- avx2指令集对php有用吗,AVX2指令集的作用
- http协议及基于http协议的文件下载
- plupload踩坑小结
- 谷歌SEO的内容营销应该怎么做
- xamarin其实也是一个鸡肋
- MATLAB 将图像随机裁剪为N*N的图像块
- win10装sql2000卡在选择配置_Win10系统安装Sql Server 2000可能会碰到的问题【解决方法】...
- 王国维先生的“人生三大境界”
热门文章
- npm ERR! gifsicle@5.2.0 postinstall: `node lib/install.js`
- 三维重建12:室内三维物体的位姿识别论文列表
- String类型的认识以及编译器优化
- 远程桌面时提示凭证不工作问题的终极解决办法
- MariaDB 双主复制的配置
- 按单词逆序句子(含标点)
- C#部分面试题及答案
- MySQL动态行转列
- Healing Psoriasis The Natural Alternative-序言(未完待续)
- xfce的面板调节声音大小的按钮不见了。