zoukankan      html  css  js  c++  java
  • 今年暑假不AC

    题目描述:

    今年暑假不AC

    “今年暑假不AC?”
    “是的。”
    “那你干什么呢?”
    “看世界杯呀,笨蛋!”
    “@#$%^&*%...”

    确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。
    作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗?(目标是能看尽量多的完整节目)

    Input
    输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。
    Output
    对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。
    Sample Input
    12 1 3 3 4 0 7 3 8 15 19 15 20 10 15 8 18 6 12 5 10 4 14 2 9 0
    Sample Output
    5
     
    思路:
    首先以0结束,用while循环读到输入为0。4 7  9   14  15
    要在一定的时间内看尽量多的节目,首先进行排序,在结束时间相等的情况下,开始的时间越晚(也就是数越大),那么此节目所占用的时间越短即可观看的节目数越多,靠前排。不相等的情况下让结束时间尽量的早(即结束时间尽量小)。这样就贪心选择了最优排列情况,然后根据实际的时间占用(前一个结束的时间小于等于下一个开始的时间),此时计数+1。输出计数即可。
    代码如下:
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 const int maxn=108;
     6 struct Node
     7 {
     8     int start;
     9     int end;
    10 };
    11 bool cmp(Node x,Node y)
    12 {
    13     if(x.end==y.end)
    14     return x.start>y.start;
    15        return x.end<y.end;
    16 }
    17 
    18 int main()
    19 {
    20     Node L[maxn];
    21     int n;
    22     while(scanf("%d",&n),n)
    23     {
    24     for(int i=1;i<=n;i++)
    25     {
    26         scanf("%d%d",&L[i].start,&L[i].end);
    27     }
    28     sort(L+1,L+n+1,cmp);
    29     int ans=1;
    30     Node t=L[1];
    31     for(int i=2;i<=n;i++)
    32     {
    33         if(t.end<=L[i].start)
    34         {
    35         ans++;
    36         t=L[i];    
    37         }
    38     }
    39     cout<<ans<<endl;
    40 }
    41     return 0;
    42 }
     
     
  • 相关阅读:
    CF710F String Set Queries(AC自动机+二进制分组)
    P5231 [JSOI2012]玄武密码(AC自动机)
    AC自动机基础&应用
    [SDOI2011]计算器(快速幂,线性同余方程,BSGS)
    数论——欧拉定理和费马小定理
    AtCoder Beginner Contest 173 题解
    【CSP2019】树的重心(树的重心、倍增、换根)
    CF708C Centroids(换根dp,树的重心)
    凸包(Graham与Andrew算法求凸包)
    [USACO10MAR]Great Cow Gathering G(换根dp)
  • 原文地址:https://www.cnblogs.com/theshorekind/p/13805001.html
Copyright © 2011-2022 走看看