本文主要是介绍cyk的时间表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
cyk的时间表
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic
Problem Description
从前有座山,“山理”有座庙,庙里有个 cyk 和 bLue , bLue 天天缠着 cyk , cyk 天天躲着 bLue !
对于 cyk 的高冷, bLue 只能从 cyk 的日常活动入手,于是他找来了 cyk 手机上的日常活动安排,发现 cyk 每天必做 N 件事,但是手机上没有 cyk 做每件事的时间,只是提示 cyk 在此之前的 Hi 小时 Mi 分钟曾完成过该事,时间感超级差的 bLue 只能对着安排表默默流泪。
相信聪明的你能帮助 bLue 找出 cyk 每天做每件事的时间,然后按时间先后顺序输出(00:00 为最早时间,23:59 为最晚时间),如果时间相同则先输出字典序最小的(别问我 cyk 为什么能同一时间做几件事, cyk 就是这么牛)。 bLue 会送给你一个 AC 作为礼物!
Input
输入数据有多组(数据组数不超过 30),到 EOF 结束。
每组数据的第一行为一个整数 N(1 <= N <= 200)代表了 cyk 每天必做的的事情。
接下来有 N 行,每行开头为一串字符串(不包含空格,长度不超过 15)代表 cyk 所做事情的名称且名称互不相同,接着为两个整数 Hi,Mi(0 <= Hi <= 100, 0 <= Mi < 60)。
最后输入此时的时间 P:Q(24小时制,输入格式请参照示例)。
Output
输出有 N 行,每行分别输出事情的名称与及 cyk 在每天做该事的时间(输出格式参照示例),且每组数据的后面输出一个空行。
Sample Input
12 wc 8 9 readingnovel 4 3 shower 78 56 sleeping 17 28 writecode 54 56 run 44 8 drinktea 23 33 watchtv 99 55 eating 1 1 playphone 25 1 redingnews 6 16 attendclass 9 9 17:06
Sample Output
attendclass 07:57 wc 08:57 shower 10:10 writecode 10:10 redingnews 10:50 readingnovel 13:03 watchtv 13:11 eating 16:05 playphone 16:05 drinktea 17:33 run 20:58 sleeping 23:38
Hint
请注意,按字典序排序时推荐使用 strcmp 函数来比较。
请留意时间差超过24小时的情况,可能需要取余。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct kk
{int h,t;char name[21];
}s[205],k;
int main()
{int a,b,c,d,e,f[205],h,i,j;while(~scanf("%d",&a)){for(b=0;b<a;b++){scanf("%s %d %d",s[b].name,&s[b].h,&s[b].t);f[b]=s[b].h*60+s[b].t;}scanf("%d:%d",&c,&d);for(e=0;e<a;e++){f[e]=(c*60+d)-f[e];if(f[e]<0)while(f[e]<0){f[e]=f[e]+24*60;}s[e].h=f[e]/60;s[e].t=f[e]%60;}for(h=0;h<=a-2;h++){for(i=0;i<a-h-1;i++){if(s[i].h>s[i+1].h){k=s[i];s[i]=s[i+1];s[i+1]=k;}else if(s[i].h==s[i+1].h){if(s[i].t>s[i+1].t){k=s[i];s[i]=s[i+1];s[i+1]=k;}else if(s[i].t==s[i+1].t&&strcmp(s[i].name,s[i+1].name)>0){k=s[i];s[i]=s[i+1];s[i+1]=k;}}}}for(j=0;j<a;j++){printf("%s %02d:%02d\n",s[j].name,s[j].h,s[j].t);}printf("\n");}return 0;
}
这篇关于cyk的时间表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!