zoukankan      html  css  js  c++  java
  • 暑假集训(2)第七弹 -----今年暑假不AC(hdu2037)

    J - 今年暑假不AC

    Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

    Description

    “今年暑假不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
     
    问题分析:贪心算法吧,先将节目关系按节目开始时间排序,然后从第一个开始,如果在它节目时间区间内有另一个节目,那么用它替换掉刚才的节目,直到节目区间内没有其他节目,重复直到时间最大,得到答案。
     
     1 #include "cstdio"
     2 
     3 struct tv
     4 {
     5     int beg;
     6     int end;
     7 };
     8 tv v[100];
     9 void tbegin(int t)
    10 {
    11     for (int i=0;i<t;i++)
    12           scanf ("%d%d",&v[i].beg,&v[i].end);
    13 }
    14 void tx(int t)
    15 {
    16    int  n=0,u=0,b;
    17     for (int i=0;i<t;i++)
    18     {
    19       if (v[i].beg >= n)
    20         {
    21           b = v[i].end;
    22           for (int j=i+1;j<t;j++)
    23           {
    24              if (v[j].beg >= n && v[j].end < b)
    25                    b = v[j].end;
    26           }
    27           u++;
    28           n = b;
    29         }
    30     }
    31     printf ("%d
    ",u);
    32 }
    33 void px(int t)
    34 {
    35     tv x;
    36     for (int i=0;i<t;i++)
    37      for (int j=i;j<t;j++)
    38      {
    39         if (v[i].beg > v[j].beg)
    40         {
    41             x = v[i];
    42             v[i] = v[j];
    43             v[j] = x;
    44         }
    45      }
    46 }
    47 int main()
    48 {
    49    int t;
    50    while (scanf ("%d",&t) && t)
    51    {
    52         tbegin(t);
    53         px(t);
    54         tx(t);
    55    }
    56    return 0;
    57 }
    View Code
  • 相关阅读:
    linux安装redis 完整步骤
    java获取音频文件播放时长
    jar包部署在linux上后浏览器访问不到的问题
    FileRead方法
    FileWrite方法
    用Calendar方法知道月份的天数
    Calendar的用法
    两个时间相减(java简单用法)
    单列体现(Runtime)
    Random方法
  • 原文地址:https://www.cnblogs.com/huas-zlw/p/5697063.html
Copyright © 2011-2022 走看看