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

    今年暑假不AC

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 11630    Accepted Submission(s): 5990


    Problem 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
     
     
     
     
    贪心题。类多个开区间,求最多的不重叠区间。
     
    右端从小到大排序,最小的必选。
    这里右2个代码,第一个是开始是自己写的,排序后,最小的必选,然后把有重叠的删掉。
    第二个看别人的报告的,排序后,先选并标记最小的那个,然后向后扫描,当发现右不重叠的+1,并且标记,再扫描后面的和刚刚标记的比较来找不重叠的。
     
     
    第一个代码:
    View Code
     1 #include<stdio.h>
    2 #include<stdlib.h>
    3 struct xoy
    4 {
    5 int left;
    6 int right;
    7 int flag;
    8 }tv[110];
    9 int cmp(const void *a,const void *b)
    10 {
    11 return ((xoy*)a)->right - ((xoy*)b)->right;
    12 }
    13
    14 int main()
    15 {
    16 int n,i,j,count;
    17 while(scanf("%d",&n)==1&&n)
    18 {
    19 for(i = 0;i < n; i++)
    20 {
    21 scanf("%d%d",&tv[i].left,&tv[i].right);
    22 tv[i].flag = 1;//假设都看。
    23 }
    24 qsort(tv,n,sizeof(tv[0]),cmp);
    25 for(i = 0;i < n; i++)
    26 {
    27 if(tv[i].flag)//从小到大如果看。
    28 {
    29 for(j = i + 1;j < n;j++)//往后扫描、
    30 {
    31 if(tv[j].left < tv[i].right)//如果有重叠。
    32 {
    33 tv[j].flag = 0;//删掉。
    34 }
    35 }
    36 }
    37 }
    38 count = 0;
    39 for(i = 0;i < n; i++)//上面处理完后,重新扫描,tv[i].flag == 1的都是看的。
    40 {
    41 if(tv[i].flag)
    42 {
    43 count++;
    44 }
    45 }
    46 printf("%d\n",count);
    47 }
    48 return 0;
    49 }
     
     
     
     
     
     
     
    第二个代码:
    View Code
     1 #include<stdio.h>
    2 #include<stdlib.h>
    3 struct xoy
    4 {
    5 int left;
    6 int right;
    7 }tv[110];
    8 int cmp(const void *a,const void *b)
    9 {
    10 return ((xoy*)a)->right - ((xoy*)b)->right;
    11 }
    12
    13 int main()
    14 {
    15 int n,i,count,flag;
    16 while(scanf("%d",&n)==1&&n)
    17 {
    18 for(i = 0;i < n; i++)
    19 {
    20 scanf("%d%d",&tv[i].left,&tv[i].right);
    21
    22 }
    23 qsort(tv,n,sizeof(tv[0]),cmp);
    24 count = 1;
    25 flag = 0;//记录第一个必选的。
    26 for(i = 1;i < n; i++)
    27 {
    28 if(tv[flag].right <= tv[i].left)//当找到新的符合的。
    29 {
    30 count++;
    31 flag = i;//记录他位置。因为下一个要和他比较,才知道是不是符合。
    32 }
    33 }
    34 printf("%d\n",count);
    35 }
    36 return 0;
    37 }
     
     
  • 相关阅读:
    HDU4628+状态压缩DP
    Javascript 去掉字符串前后空格的五种方法
    Javascript 数组之判断取值和数组取值
    ASP.NET MVC 出现错误 “The view 'XXX' or its master was not found or no view engine support”
    ASP.NET MVC 页面调整并传递参数
    ASP.NET MV3 部署网站 报"Could not load file or assembly ' System.Web.Helpers “ 错的解决方法
    ASP.NET MVC 控制器向View传值的三种方法
    CSharp 如何通过拼接XML调用存储过程来查询数据
    SQLServer : EXEC和sp_executesql的区别
    关于SQLServer2005的学习笔记—异常捕获及处理
  • 原文地址:https://www.cnblogs.com/qiufeihai/p/2322179.html
Copyright © 2011-2022 走看看