zoukankan      html  css  js  c++  java
  • 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 <bitsstdc++.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;
    } 
  • 相关阅读:
    经典论文翻译导读之《Finding a needle in Haystack: Facebook’s photo storage》
    Etcd源码解析(转)
    etcd集群故障处理(转)
    etcd集群部署与遇到的坑(转)
    LeetCode All in One 题目讲解汇总(转...)
    pyinstaller-python->exe
    3个方法解决百度网盘限速(转)
    Tensorflow 教程系列 | 莫烦Python
    分布式存储Seaweedfs源码分析
    解决Java Web项目中Word、Excel等二进制文件编译后无法打开的问题
  • 原文地址:https://www.cnblogs.com/zhangjiuding/p/7410803.html
Copyright © 2011-2022 走看看