题意:有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种理解)相关推荐

  1. 【uva 1614】Hell on the Markets(算法效率--贪心)

    题意:有一个长度为N的序列A,满足1≤Ai≤i,每个数的正负号不知.请输出一种正负号的情况,使得所有数的和为0.(N≤100000) 解法:(我本来只想静静地继续做一个口胡选手...←_← 但是因为这 ...

  2. uva 1617——Laptop

    题意:有n个长度为1的线段,确定它们的起点,使得第i个线段在[ri,di]之间,输出空隙数目的最小值. 思路:贪心.首先对区间进行排序,然后扫描一遍,当上一个线段最右边加1<=当前最左的点的时, ...

  3. UVa - 1617 - Laptop

    还是贪心法. 把原始数据排序,排序的规则是先依照右端点排序,右端点同样的情况下,再依照左端点排序.然后最左边開始遍历线段,取第一个线段的右端点,推断是否和第二个线段的右端点相等.假设相等,肯定能够缩短 ...

  4. 数据结构和算法之常用 10 种算法

    目录 1.二分查找算法(非递归) 2.分治算法 2.1分治算法最佳实践-汉诺塔 3.动态规划算法 4.KMP 算法 4.1KMP 算法最佳应用-字符串匹配问题 5.贪心算法 5.1贪心算法最佳应用-集 ...

  5. 第四课:算法效率的度量和存储空间需求

    第四课 本课主题: 算法效率的度量和存储空间需求 教学目的: 掌握算法的渐近时间复杂度和空间复杂度的意义与作用 教学重点: 渐近时间复杂度的意义与作用及计算方法 教学难点: 渐近时间复杂度的意义 授课 ...

  6. 超摩尔定律!OpenAI官宣AI算法效率每16个月翻一番

    OpenAI今天宣布将开始追踪机器学习模型的效率,并对AI算法演进的情况进行定量追踪,结果显示算法改进效率吊打摩尔定律. 为了启动这一进程,Open AI发表了一份分析报告,开篇即用数据展示了算法演进 ...

  7. 最短路径算法(一) Dijkstra算法(贪心算法)

    Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题. 其基本原理是 ...

  8. prim算法_贪心算法详解(附例题)

    贪心算法的特征规律 贪心算法,"贪心"二字顾名思义,因此其规律特征就是更加注重当前的状态,贪心法做出的选择是对于当前所处状态的最优选择,它的解决问题的视角是微观的"局部& ...

  9. 3.Python算法之贪心算法思想

    贪心算法 1.什么是贪心算法 2.贪心算法的特点和思路 3.贪心算法的缺点 4.贪心算法的基本思路 5.贪心算法的基本过程 6.贪心算法解决"找零"问题 6.贪心算法解决" ...

最新文章

  1. Git 常用命令速查表(图文+表格)
  2. vue怎么运行html,怎样运行一个vue.js项目
  3. 将自己的类封装为lib的方法
  4. c语言线性表拷贝,数据结构(C语言版)---线性表顺序存储表示
  5. Integer注意_享元设计模式
  6. unity android 分包,Unity以分包(obb)形式集成到安卓原生 我慢慢填坑
  7. python中def root的用法_python scipy optimize.root_scalar用法及代码示例
  8. BZOJ2428[HAOI2006] 均分数据
  9. 融云server sdk java_开源项目索引
  10. 很多人问中国网络安全行业怎么样?这篇文看完让你彻底了解中国网络安全行业的全景
  11. 如何在windows10系统将用户名改为英文
  12. 通用24CXXX读写程序(GCC),兼容24C系列存储器(24C01到24C1024),支持跨器件跨页读写,支持连续
  13. avx2指令集对php有用吗,AVX2指令集的作用
  14. http协议及基于http协议的文件下载
  15. plupload踩坑小结
  16. 谷歌SEO的内容营销应该怎么做
  17. xamarin其实也是一个鸡肋
  18. MATLAB 将图像随机裁剪为N*N的图像块
  19. win10装sql2000卡在选择配置_Win10系统安装Sql Server 2000可能会碰到的问题【解决方法】...
  20. 王国维先生的“人生三大境界”

热门文章

  1. npm ERR! gifsicle@5.2.0 postinstall: `node lib/install.js`
  2. 三维重建12:室内三维物体的位姿识别论文列表
  3. String类型的认识以及编译器优化
  4. 远程桌面时提示凭证不工作问题的终极解决办法
  5. MariaDB 双主复制的配置
  6. 按单词逆序句子(含标点)
  7. C#部分面试题及答案
  8. MySQL动态行转列
  9. Healing Psoriasis The Natural Alternative-序言(未完待续)
  10. xfce的面板调节声音大小的按钮不见了。