baoge的洗漱難題[黃]
Time Limit: 5000 ms ??? Memory Limit: 65536 KB Total Submit: 79 ??? Accepted: 21Description
眾所周知,地大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 1000 int 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; }
?