Codeforces 845C. Two TVs 思路:简单贪心算法
2024-08-31 10:02:41
题目:
题目原文链接:http://codeforces.com/contest/845/problem/C
题意:现在我们有一个电视清单,有两个电视,电视清单上有每一个节目的开始时间和结束时间。
电视不能接连不间断的播放,例如TV1播放完1-2点的节目后不能接着播放2-3点的电视,除非在TV2上播放,如果TV2也正在播放则不能播放完清单。
思路:
1.对清单排序,让开始时间早的靠前,如果开始时间相同,结束时间早的靠前。
2.如果TV1已经结束。就把这一个节目的结束时间赋给TV1,然后看下一个节目。
3.如果TV1尚未结束,TV2已经结束。就把这一个节目的结束时间赋给TV2,然后看下一个节目。
4.如果TV1、TV2都尚未结束。就输出NO,不再看下一个节目。
代码:
#include <bits\stdc++.h>
using namespace std; struct node{
int l;int r;
}a[]; bool cmp(node a,node b){
if(a.l == b.l) return a.r < b.r;
return a.l < b.l;
} int main(){
int n;
cin >> n;
for(int i = ;i < n; i++){
cin >> a[i].l >> a[i].r;
}
sort(a,a+n,cmp); //对清单排序,让开始时间早的靠前,如果开始时间相同,结束时间早的靠前。 int r1 = -,r2 = -; //初始化上一个节目结束的时间
for(int i = ;i < n; i++){
if(r1 < a[i].l){ //如果TV1已经结束。就把这一个节目的结束时间赋给TV1,然后看下一个节目。
r1 = a[i].r;
continue;
}
if(r2 < a[i].l){ //如果TV1尚未结束,TV2已经结束。就把这一个节目的结束时间赋给TV2,然后看下一个节目。
r2 = a[i].r;
continue;
}
cout << "NO" << endl;//如果TV1、TV2都尚未结束。就输出NO,不再看下一个节目。
return ;
} cout << "YES" << endl;
return ;
}
最新文章
- c++11的右值引用、移动语义
- spring中schedule注解的使用
- Zookeeper相关知识
- hdu-5597 GTW likes function(欧拉函数+找规律)
- CKRule BRMS-决策表使用说明
- Python新手学习基础之运算符——成员运算与身份运算
- tomcat异常
- Android自动化测试框架新书:交流
- Textarea自适应高度 JS实现,兼容IE6\7\8\9\10\11
- Vue(day1)
- 【React】学习之道
- java数据结构面试问题—快慢指针问题
- 【Linux基础】VM使用
- 洛谷 P2527 [SHOI2001]Panda的烦恼 解题报告
- 这个代码给所有带有name属性的链接加了一个背景色
- 对mysql性能影响的几个重要参数---高性能(七)
- (3)socket的基础使用(基于UDP协议)
- onkeydown事件
- 二十七 Python分布式爬虫打造搜索引擎Scrapy精讲—通过自定义中间件全局随机更换代理IP
- 使用John the ripper工具来尝试破解Linux密码