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

洛谷 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 3

out:
2
*/




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

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




 


http://www.kler.cn/news/354773.html

相关文章:

  • (C/C++)文件
  • 鼠标市场洞察:数据分析揭示消费趋势!
  • 如何解决MQ的重复消费问题?Kafka、ActiveMQ、RabbitMQ有什么区别?
  • 低功耗 ARMxy工业计算机:工业场景的绿色新选择
  • Linux 简述基于 TCP 连接状态分析网络排障
  • 【C语言】函数的声明与定义
  • Windows 和 Ubuntu通讯的网络设置
  • 无技能,学历不高?想要找一份高薪工作,通信网优肯定适合你
  • 影楼即将倒闭!!!!stable diffusion comfyui制作:AI人像摄影专业工作流
  • python string中提取中文字符处理之后插入回原string
  • 【python爬虫基础】年轻人的第一个爬虫程序
  • C++简单多状态dp:按摩师、打家劫舍II、删除并获得点数、粉刷房子
  • 2024全新UI网址发布页源码带黑夜模式
  • WebSocket介绍和入门案例
  • xavier 在tensorflow pytorch中的应用,正太分布和均匀分布的计算公式不一样
  • 串的模式匹配算法_BF算法
  • 【实战案例】SpringBoot项目中异常处理通用解决方案
  • 单片机原理与应用——嵌入式系统中的核心控制器
  • MySQL从入门到跑路
  • 干货|antd组件库Table组件开启虚拟列表的影响