zoukankan      html  css  js  c++  java
  • 7B

    “今年暑假不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


    // don't know why
     1 #include<stdio.h>
     2 
     3 struct Timetable
     4 { int s; int e; };
     5 
     6 int main()
     7 {
     8     int n, c;
     9     struct Timetable t[100], temp;
    10     while(scanf("%d", &n), n)
    11     {
    12         for(int i=0;i<n;i++)
    13             scanf("%d %d", &t[i].s, &t[i].e);
    14         // 按节目结束时间从小到大排序 
    15         for(int gap=n/2; gap>0; gap/=2)
    16             for(int i=gap; i<n; i++)
    17                 for(int j=i;j-gap>=0&&t[j].e<t[j-gap].e;j-=gap)
    18                 { temp=t[j-gap]; t[j-gap]=t[j]; t[j]=temp; }
    19         /*
    20         printf("
    ");
    21         for(int i=0;i<n;i++)
    22             printf("%d %d %d
    ", t[i].s, t[i].e, i);
    23         printf("
    ");
    24         */
    25         // 将开始时间不符合从小到大的顺序的节目删除 
    26         for(int i=0;i<n-1;i++)
    27             for(int j=i+1;j<n;j++)
    28                 if(t[i].s>t[j].s)
    29                     t[j].e=0;
    30         /*
    31         for(int i=0;i<n;i++)
    32             if(t[i].e)
    33                 printf("%d %d %d
    ", t[i].s, t[i].e, i);
    34         printf("
    ");
    35         */
    36         // 统计能完整看到的电视节目的个数 
    37         c=0;
    38         for(int i=0;i<n-1;)
    39             if(t[i].e)
    40             {
    41                 c++;
    42                 // printf("%d %d %d
    ", t[i].s, t[i].e, i); //
    43                 int flag=1;
    44                 for(int j=i+1;j<n;j++)
    45                     if(t[i].e&&t[j].s>=t[i].e)
    46                     { i=j; flag=0; break; }
    47                 if(flag) break;
    48             }
    49         printf("%d
    ", c);
    50     }
    51     return 0;
    52 }
    WA
    // 贪心算法(详见紫书8.4.2)
     1 #include<stdio.h>
     2 
     3 struct Timetable
     4 { int s; int e; };
     5 
     6 int main()
     7 {
     8     int n, c;
     9     struct Timetable t[100], temp;
    10     while(scanf("%d", &n), n)
    11     {
    12         for(int i=0;i<n;i++)
    13             scanf("%d %d", &t[i].s, &t[i].e);
    14         // 按节目结束时间从小到大排序 
    15         for(int gap=n/2; gap>0; gap/=2)
    16             for(int i=gap; i<n; i++)
    17                 for(int j=i;j-gap>=0&&t[j].e<t[j-gap].e;j-=gap)
    18                 { temp=t[j-gap]; t[j-gap]=t[j]; t[j]=temp; }
    19         /*
    20         printf("
    ");
    21         for(int i=0;i<n;i++)
    22             printf("%d %d %d
    ", t[i].s, t[i].e, i);
    23         printf("
    ");
    24         */
    25         // 将开始时间不符合从小到大的顺序的节目删除 
    26         for(int i=0;i<n-1;i++)
    27             for(int j=i+1;j<n;j++)
    28                 if(t[i].s>t[j].s)
    29                     t[j].e=0;
    30         /*
    31         for(int i=0;i<n;i++)
    32             if(t[i].e)
    33                 printf("%d %d %d
    ", t[i].s, t[i].e, i);
    34         printf("
    ");
    35         */
    36         // 统计能完整看到的电视节目的个数 
    37         c=0;
    38         for(int i=0;i<n;)
    39             if(t[i].e)
    40             {
    41                 c++;
    42                 // printf("%d %d %d
    ", t[i].s, t[i].e, i); //
    43                 int flag=1;
    44                 for(int j=i+1;j<n;j++)
    45                     if(t[i].e&&t[j].s>=t[i].e)
    46                     { i=j; flag=0; break; }
    47                 if(flag) break;
    48             }
    49         printf("%d
    ", c);
    50     }
    51     return 0;
    52 }
    AC
  • 相关阅读:
    【手机网络游戏 编程】C#异步socketAPI调用 处理数据的流程
    【已解决】unity4.2.0f4 导出Android工程报错:Error building Player: ArgumentException: Illegal characters in path. [unity导出android工程 报错,路径含有非法字符]
    【已解决】Android微信开放平台,申请移动应用的 应用签名 如何获取
    【keytool jarsigner工具的使用】Android 使用JDK1.7的工具 进行APK文件的签名,以及keystore文件的使用
    JavaScript闭包浅谈
    C#接口和抽象类的区别
    .NET中的垃圾回收
    访问修饰符(public,private,protected,internal,sealed,abstract)
    C#.NET里面抽象类和接口有什么区别?
    在 ASP.NET 中执行 URL 重写的方法
  • 原文地址:https://www.cnblogs.com/goldenretriever/p/10357098.html
Copyright © 2011-2022 走看看