1704:baoge的洗漱难题[黄]

来源:互联网 发布:卡诺仙吃出毛病知乎 编辑:程序博客网 时间:2024/04/26 15:35

baoge的洗漱难题[黄]

Time Limit: 5000 ms     Memory Limit: 65536 KB Total Submit: 79     Accepted: 21
Description
众所周知,地大19楼的盥洗室非常小,所以经常会非常拥挤,很多时候去洗漱的时候不得不排很长的队。有时候baoge会排上半小时的队才洗漱完,所以他非常苦恼。终于有一天,他再也受不了去排队洗漱了。所以他下定决心,”now or never!”。要么一去就马上洗漱,要么不去洗漱继续睡觉。 baoge是个有良好作息规律的coder,所以他每天只有在限定的时间段里才去洗漱,洗漱时间为m分钟。因为饱受排队洗漱的困扰,baoge在洗漱的时候不希望人数多于k( 其他人)人,不然他是不会去洗漱的(即使在他洗漱开始身边少于k人,但是如果洗漱的过程中人数大于等于k,baoge也是不能容忍的,所以必须保证他洗漱的m分钟内洗漱人数始终小于k)。所以baoge求助于你们,已知19楼有n个人,告诉你每个人的洗漱时间。按照baoge的洗漱规则,判断baoge今天是否能洗漱成功。
Input
输入T代表有T组测试数据 对于每组数据,第一行输入三个数,n,m,k(1<=n<=100,1<=m<=360,1<=k<=100).分别代表19楼人数,baoge洗漱时间,baoge洗漱的人数限制。 接下来一行输入一个时间段表示baoge洗漱的限定时间段(6:00-12:00之间)。 接下来n行,每行一个时间段,代表其他人的洗漱时间段(6:00-12:00之间)。
Output
对于每组数据,如果baoge能洗漱完,则输出”:)”(没有双引号),否则输出”Zzzzzz”。
Sample Input
2 5 30 3 8:00-9:00 8:29-9:30 9:30-10:30 10:30-11:30 8:00-8:30 8:29-9:45 5 10 5 6:10-6:20 6:10-6:20 6:10-6:20 6:10-6:20 6:10-6:20 6:10-6:20
Sample Output
:) Zzzzzz
Hint
对于样例1,baoge的洗漱时间段是8:00-9:00,只有8:29和8:30有3个人洗漱,所以baoge可以在8:31-9:00完成洗漱。 样例2,在6:10-6:20有5个人,所以不能洗漱。 对于时间段的输入可以采用scanf(“%d:%d-%d:%d”,&h1,&m1,&h2,&m2)。
 
#include <stdio.h>#include <string.h>//很自然的想到使用数组来处理。因为总的时间段就6个小时,按照分钟划分//也就是说6*60的数组就够用了;#define N 1000int time[N];int Time(int hour,int fen){    return (hour-6)*60+fen;}int main(){    int a,b,a1,b1;    int i,j,k,n,m,T;    scanf("%d",&T);    while(T--)    {        for(i=0;i<1000;i++)            time[i]=0;        scanf("%d %d %d",&n,&m,&k);        scanf("%d:%d-%d:%d",&a,&b,&a1,&b1);        for(i=0;i<n;i++)        {            char str[20];            int hour,fen,hour1,fen1;            scanf("%d:%d-%d:%d",&hour,&fen,&hour1,&fen1);            /*scanf("%s",str);            sscanf(&str[0],"%d",&hour);            sscanf(&str[2],"%d",&fen);            sscanf(&str[5],"%d",&hour1);            sscanf(&str[7],"%d",&fen1);*/            int time1=Time(hour,fen);int time2=Time(hour1,fen1);            for(j=time1;j<=time2;j++)                time[j]++;        }        int flag=1;        int aa,bb;        aa=Time(a,b);bb=Time(a1,b1);        for(i=aa;i<=bb-m+1;i++)        {            int flag=1;            for(j=i;j<i+m;j++)            {                if(j>bb)                {                    flag=0;break;                }                if(time[j]<k) continue;                else                {                    flag=0;break;                }            }            if(flag) break;        }        if(i<=(bb-m+1)) printf(":)\n");        else printf("Zzzzzz\n");    }    return 0;}

 

0 0
原创粉丝点击