Codeforces 845C. Two TVs 思路:简单贪心算法

题目:

 

题目原文链接: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[200005];

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 = 0;i < n; i++){
        cin >> a[i].l >> a[i].r;
    }
    sort(a,a+n,cmp); //对清单排序,让开始时间早的靠前,如果开始时间相同,结束时间早的靠前。 
    
    int r1 = -1,r2 = -1;  //初始化上一个节目结束的时间 
    for(int i = 0;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 0;
    }
    

    cout << "YES" << endl;
    return 0;
} 

 

转载于:https://www.cnblogs.com/zhangjiuding/p/7410803.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值