zoukankan      html  css  js  c++  java
  • 【贪心】SNNU_六一:A题 今年暑假不AC

     

    A - 今年暑假不AC

    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

     

     
     
    Analysis
     
    本题是一道基本的贪心算法解决活动安排问题
     
    先将结束时间升序排列,定义一个布尔型数组 b[],用来存放是否选取数据数组中第 i 个元素。
    在选取函数 select 中,结束时间最靠前的第一个元素必选,然后选择开始时间大于等于前一个已选择元素的结束时间的元素。
     
    Tips
    • 每次大循环开头要初始化 numb, b[] 为 0 
    • 用 sort 函数排序时需写一个比较函数来比较结构体中元素的大小
     
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 
     5 using namespace std;
     6 
     7 struct tv
     8 {
     9     int s;
    10     int e;
    11     int len;
    12 }t[100];
    13 
    14 typedef struct tv TV;
    15 
    16 
    17 bool cmp(const TV &a,const TV &b)
    18 {
    19     if(a.e<=b.e) return true;
    20     return false;
    21 }
    22 
    23 void select(int n,TV t[],bool b[])
    24 {
    25     b[1]=true;
    26     int preEnd=1;
    27     for(int i=2;i<n+1;i++)
    28     {
    29         if(t[i].s>=t[preEnd].e)
    30         {
    31             b[i]=true;
    32             preEnd=i;
    33         }
    34     }
    35 }
    36 
    37 main()
    38 {
    39     int i,n,numb=0;
    40     bool b[100]={0};
    41 
    42     while(~scanf("%d",&n)&&n)
    43     {
    44         getchar();
    45         for(i=0;i<100;i++)
    46             b[i]=0;
    47         numb=0;
    48         for(i=1;i<n+1;i++)
    49         {
    50             scanf("%d %d",&t[i].s,&t[i].e);
    51             getchar();
    52         }
    53         sort(t,t+n+1,cmp);
    54 
    55         select(n,t,b);
    56 
    57         for(i=1;i<n+1;i++)
    58             if(b[i]) numb++;
    59         printf("%d
    ",numb);
    60 
    61     }
    62 
    63 
    64 }
  • 相关阅读:
    http 请求中 缓存 的使用
    charles 中advance repeat(并发请求)
    charles 中 breakingpoint setting 、breakpoints(断点设置打断点)
    (剑指offer) 用两个栈来实现一个队列
    ios系统在h5页面下拉上拉会带动整个webview 出现空白
    (剑指offer)从尾到头打印链表js
    二维数组中的查找
    导航栏吸顶效果
    js归并排序的实现
    vue项目切换不同的tabbar显示不同的内容
  • 原文地址:https://www.cnblogs.com/GY8023/p/4570876.html
Copyright © 2011-2022 走看看