任务选择问题(贪心算法)

题目描述

  今天Ckp打算去约会。大家都知道Ckp是超级大帅哥,所以和他约会的MM也超级多,她们每个人都和Ckp订了一个约会时间。但是今天Ckp刚打算出门的时候才发现,某几个MM的约会时间有冲突。由于Ckp不会分身,还不能和多个MM同时约会,他只能忍痛割爱拒绝掉某些MM。但是Ckp这个花心大萝卜还是不死心,他想知道,他最多可以和多少个MM约会。

输入

  输入的第一行包含一个正整数N(0<N<=1000),表示和Ckp约会的MM数。
  接下去N行,每行描述一个MM,格式为: Name starttime endtime,表示在[starttime,endtime)这个半开区间是这个MM的约会时间,starttime < endtime。名字由大写或小写字母组成,最长不超过15个字母,保证没有两个人拥有相同的名字,所有时间采用24小时制,格式为XX:XX,且在06:00到23:00之间。

输出

  输出的第一行是一个整数M表示Ckp最多可以和多少个MM约会。
  接下来那一行就是M个MM的名字,用空格隔开。您可以按照任意的顺序输出。如果存在多个答案,您可以任选一个输出。

样例输入

4
Lucy 06:00 10:00
Lily 10:00 17:00
HanMeimei 16:00 21:00
Kate 11:00 13:00


样例输出

3
Lucy Kate HanMeimei

#include
    
    
     
     
#include
     
     
      
      
#include
      
      
       
       
#define N 1001
using namespace std;

typedef struct MM
{
    char name[N];
    char start[N];
    char endt[N];
};
MM mm[N];

void QuickSort(MM a[], int s, int t)
{
    int i=s, j=t;
    MM temp;
    if(s
       
       
        
        i&&strcmp(a[j].endt,temp.endt)>=0) j--;
            strcpy(a[i].name,a[j].name);
            strcpy(a[i].start,a[j].start);
            strcpy(a[i].endt,a[j].endt);
            while(i
        
        
          <=0) i++; strcpy(a[j].name,a[i].name); strcpy(a[j].start,a[i].start); strcpy(a[j].endt,a[i].endt); } strcpy(a[i].name,temp.name); strcpy(a[i].start,temp.start); strcpy(a[i].endt,temp.endt); QuickSort(a,s,i-1); QuickSort(a,i+1,t); } } int main() { int M; cin>>M; getchar(); for(int i=0; i 
         
           >mm[i].name>>mm[i].start>>mm[i].endt; QuickSort(mm,0,M-1); int n=0; n++; for(int i=1,j=0; i 
          
            =0) { n++; j=i; } cout< 
           
             < 
            
              =0) { cout< 
             
               <<" "; j=i; } cout< 
               
              
             
            
           
          
        
       
       
      
      
     
     
    
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值