题目描述

现在各大 oj 上有 nn 个比赛,每个比赛的开始、结束的时间点是知道的。

yyy 认为,参加越多的比赛,noip 就能考的越好(假的)。

所以,他想知道他最多能参加几个比赛。

由于 yyy 是蒟蒻,如果要参加一个比赛必须善始善终,而且不能同时参加 22 个及以上的比赛。

输入格式

第一行是一个正数n,接下来n行每行是2个整数ai,bi,表示比赛开始时间,结束时间。

输出格式

一个整数最多参加的比赛数目。

输入输出样例

输入

3
0 2
2 4
1 3

输出

2

做题思路

相当于就是在数轴上画区间,只要两个区间没有重叠的部分就ok。
    如何判断两个区间没有重复,就是判断前一个区间的末尾有没有小于后一个区间的开始。这样比较关系出来后就需要进行排序,但是是按照开始时间排还是结束时间排,这是一个问题,因为我刚开始想的是按照开始时间排序,很不幸,全wa。
    先来分析下为什么不能能按照开始时间排序,举个例子
    1 10000
    2 1000
    3 100
    4 10

如果按照开始时间进行排序,就是上边的顺序,但是从头开始遍历,判断前一个的结束是否大于等于后一个的开始,如果这样判断,就一场比赛也参加不了。但是如果按照结束时间开始排序,这样就是
    4 10
    3 100
    2 1000
    1 10000
将第一个的结束时间设置为最小的结束时间,从第二个开始判断,如果后面的开始时间大于等于前面的结束时间,就表示这个比赛可以参与,就把后面的结束时间设置为最小的结束时间。
上代码:

 for(int i=1;i<n;i++) {if(list.get(i).begin>=minOver) {minOver=list.get(i).over;cnt++;}}

接下来就是完整的解题代码

import java.util.*;public class Main {static class Time {int begin;int over;}public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();ArrayList<Time> list=new ArrayList<>();for(int i=0;i<n;i++) {Time time=new Time();time.begin=sc.nextInt();time.over=sc.nextInt();list.add(time);}int cnt=1;list.sort((o1,o2)->o1.over-o2.over);int minOver=list.get(0).over;for(int i=1;i<n;i++) {if(list.get(i).begin>=minOver) {minOver=list.get(i).over;cnt++;}}System.out.println(cnt);}
}

有些人可能疑惑这里sum的初始值为什么是1,因为就算看起来这些时间都有重合,最少都能参加一场比赛

总结

选择不相交区间问题
经典的贪心题
贪心的策略是先给所有的区间按照右边界排序
其中一定要选择第一个区间

洛谷 P1803题解 java 贪心相关推荐

  1. 信息学奥赛一本通 1323:【例6.5】活动选择 | 1422:【例题1】活动安排 | 洛谷 P1803 凌乱的yyy / 线段覆盖

    [题目链接] ybt 1323:[例6.5]活动选择 ybt 1422:[例题1]活动安排 洛谷 P1803 凌乱的yyy / 线段覆盖 注意:ybt 1323数据个数最大为 1 0 3 10^3 1 ...

  2. 洛谷p1598题解记录

    洛谷p1598题解记录 对这道题来说,输入几行数据其实无所谓,判定时是按照是否输入EOF来决定输入是否结束的. 代码 #include <stdio.h>char numberCount[ ...

  3. 洛谷CF982B 题解

    谢谢管理员大大给过 优先队列速通大法 hello!我又来水体了,不过嘛,相对来说这道题普及-不算水. 那我们就来研究研究吧. 先看题目 题目传送门 F1:0分暴力 一开始我也是闲的没事想要弄一下暴力做 ...

  4. 洛谷P1001题解--zhengjun

    题目描述 输入两个整数 a,ba,ba,b,输出它们的和(∣a∣,∣b∣≤109|a|,|b |\le 10^9∣a∣,∣b∣≤109). 注意 PascalPascalPascal 使用intege ...

  5. 洛谷P1914题解——(本地测试AC但是交题爆零全WA)使用getchar();

    本题最大的坑在于: windows环境下的换行符为\r\n,linux环境的换行符为\n. 我们再来看看洛谷的部分OJ判题机数据和机制 常见"我在本地/xxOJ AC了.洛谷却不过" ...

  6. 贪心算法:洛谷P1803凌乱的yyy解析(java)

    题目描述 相关链接:https://www.luogu.com.cn/problem/P1803 解析 这道题对于java来说,第一思路应该是贪心算法,创建一个二维数组(或者创建两个数组),然后对结束 ...

  7. 线段覆盖(洛谷P1803题题解,C++语言描述)

    题目要求 P1803题目链接 分析 这题是一个线段覆盖问题,但并不是很复杂,也是贪心思想. 想要尽可能放线段,不能重合(可以正好相交),那就可以每一次只关注右端点,尽可能地选择剩余未选的线段中右端点最 ...

  8. 像亲和数一样亲密无间(洛谷P1851题解,Java语言描述)

    前言 "朋友是你灵魂的倩影,要像220与284一样亲密." --毕达哥拉斯 题目要求 P1851题目链接 分析 本题有点讲究,值得说道说道. 这个题看起来很迷惑,其实是数学上的&q ...

  9. Python怎么这么香(洛谷P2788题解,Java语言描述)

    题目要求 P2788题目链接 分析 表达式求值而已,无营养题目~~ 用Java简单求解即可 AC代码(Java语言描述) import java.util.LinkedList; import jav ...

最新文章

  1. pyside2 安装_PySide2安装踩坑指南
  2. 为帐户创建一个Apex触发器,以根据自定义字段将送货地址邮政编码与账单地址邮政编码匹配
  3. java的startswith_java startsWith和endsWith的用法 | 学步园
  4. 四针手表指的是什么_1000~1500元的男士手表推荐
  5. C++多个文本读取问题
  6. IntelliJ IDEA 2020 创建xml文件
  7. 关于Spring MVC 中地址栏访问 /WEB-INF下的.jsp
  8. java se development kit可以卸载吗_首款纯电版MINI COOPER详细评测,或将国产,值得等吗?...
  9. 拦截器 参数不过去 的解决方法
  10. 【题解】Inspection UVa 1440 LA 4597 NEERC 2009
  11. 『ORACLE』 Linux和oracle用户下的常用命令(11g)
  12. Unity自定义UI组件(九) 颜色拾取器(下)
  13. case when的几种用法
  14. RapidMiner Studio 自动模型
  15. openh264限制slice/nal分片大小导致的编码数据错误
  16. 计算机的内存储器比外存储器的比较,计算机的内存储器比外存储器
  17. 分享一款光谱分析软件(离线分析软件,导入光谱数据即可分析),功能超级多,超级强大,计算荧光量子效率,发射光谱的拉曼峰,计算共振能量转移(FRET)效率等
  18. 欧姆龙sysmac studio 与得克威尔EX-1100(EX-2C0S,EX300S)EtherCat配置与通信
  19. 从.weights中提取权重数据
  20. 用python的turtle画分形树

热门文章

  1. 什么是微信防火墙_为什么越来越多人用网络股票配资?配资平台困扰你的是太多了?不,是它!...
  2. 五环外的北京:医疗 AI 的最终战场
  3. RAM的coe文件与简单DDS实现
  4. 微信里怎么打开html文件夹下,微信里的文件夹怎样在电脑里打开
  5. uedbet不提款一场比赛对哥伦比亚
  6. 中断控制器8259A
  7. 奇怪的Flash导出问题
  8. 48个Dreamweaver超级实用技巧。
  9. 精品软件 推荐 Windows优化大师 80后都用过的软件
  10. Abp 实现通过手机号注册用户