当前位置: 首页 > news >正文

洛谷 P1803:凌乱的yyy / 线段覆盖 ← 贪心算法

【题目来源】
https://www.luogu.com.cn/problem/P1803

【题目背景】
快 noip 了,yyy 很紧张!

【题目来源】
现在各大 oj 上有 n 个比赛,每个比赛的开始、结束的时间点是知道的。
yyy 认为,参加越多的比赛,noip 就能考的越好(假的)。
所以,他想知道他最多能参加几个比赛。
由于 yyy 是蒟蒻,如果要参加一个比赛必须善始善终,而且不能同时参加 2 个及以上的比赛。

【输入格式】
第一行是一个整数 n,接下来 n 行每行是 2 个整数 ai,bi(ai<bi),表示比赛开始、结束的时间。

【输出格式】
一个整数最多参加的比赛数目。

【输入样例】
3
0 2
2 4
1 3

【输出样例】
2

【说明/提示】
对于 20% 的数据,n≤10;
对于 50% 的数据,n≤10^3;
对于 70% 的数据,n≤10^5;
对于 100% 的数据,1≤n≤10^6,0≤ai<bi≤10^6。

【算法分析】
首先,对结束时间 to 从小到大进行排序;
其次,令比较基准 t = -1,并从第 i=0 个元素开始依次比较。如果第 i 个元素的开始时间 from 在比较基准 t 之后(即 a[i].from>=t),那么 ans++,把第 i 个元素的结束时间 to 作为新的比较基准 t(即 t=a[i].to),如此循环即可。

【算法代码】

#include <bits/stdc++.h>
using namespace std;const int maxn=1e6+5;struct Node {int from;int to;
} a[maxn];int up(Node u,Node v) {return u.to<v.to;
}int main() {int n;cin>>n;for(int i=0; i<n; i++) {cin>>a[i].from>>a[i].to;}sort(a,a+n,up);int ans=0;int t=-1;for(int i=0; i<n; i++) {if(a[i].from>=t) {ans++;t=a[i].to;}}cout<<ans<<endl;return 0;
}/*
in:
3
0 2
2 4
1 3out:
2
*/




【参考文献】
https://www.luogu.com.cn/problem/solution/P1803

https://www.acwing.com/file_system/file/content/whole/index/content/8430847/




 


http://www.mrgr.cn/news/50319.html

相关文章:

  • WIN11常用设置
  • Leetcode 227 Basic calculator
  • 阻塞队列相关的问题
  • Github 2024-10-15 Python开源项目日报 Top10
  • Python | Leetcode Python题解之第479题最大回文数乘积
  • 【Linux】解读信号的本质&相关函数及指令的介绍
  • DDPM代码详解(可用)
  • C语言复习概要(六)
  • 【2D/3D-Lidar-SLAM】 2D/3D激光SLAM以及GMapping 与 Cartographer
  • 开发规范 - mac系统1小时装机极速装机开发环境
  • 基于springboot+微信小程序校园自助打印管理系统(打印1)
  • Golang | Leetcode Golang题解之第479题最大回文数乘积
  • 大厂服务降级规范
  • 牛只行为及种类识别数据集18g牛只数据,适用于多种图像识别,目标检测,区域入侵检测等算法作为数据集。数据集中包括牛只行走,站立,进食,饮水等不同类型的数据
  • Forward Chaining(前向链推理)
  • iOS 打包/导出时提示图标错误,缺少某个规格的图标
  • 抽奖结果已出
  • 除了ConcurrentHashMap,还有哪些Java集合类在并发处理上有优化?
  • Vue开发中由错误These relative modules were not found 引起的问题思考及解决
  • maven项目package打包的时候遇到-source 1.5 中不支持 try-with-resources