![]() |
#2
Sky_2020-01-02 14:02
这是我的代码 错的还挺离谱的
![]() #include<stdio.h> #include<string.h> struct qd { char name[20]; char time1,time2,time3; char start[5],endd[5]; int sum=0,sum2; } a[1000],b[1000]; int main () { int T; scanf("%d",&T); while(T--) { int n,m; scanf("%d%d",&n,&m); for(int i=1; i<=n; i++) { scanf("%s%c%c%c",a[i].name,&a[i].time1,&a[i].time2,&a[i].time3); if(a[i].time1=='o') a[i].sum+=3; if(a[i].time2=='o') a[i].sum+=3; if(a[i].time3=='o') a[i].sum+=3; } for(int i=1; i<=m; i++) { scanf("%s%s%s",b[i].name,b[i].start,b[i].endd); } int len=0; int hour,minute; for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { if(strcmp(a[i].name,b[j].name)==0) { len+=((b[j].endd[0]*10+b[j].endd[1])*60+b[j].endd[3]*10+b[j].endd[4])-((b[j].start[0]*10+b[j].start[1])*60+b[j].start[3]*10+b[j].start[4]); } } a[i].sum2=a[i].sum*60+len; } int len2; for(int i=1; i<=n; i++) { len2=a[i].sum2; if(len2>=1440) { printf("%-12s 24:00\n",a[i].name); } else if(len2>=540) { printf("%-12s %02d:%02d\n",a[i].name,len2/60,len2%60); } else { printf("%-12s %02d:%02d",a[i].name,len2/60,len2%60); len2=540-len2; printf("(-%02d:%02d)\n",len2/60,len2%60); } } printf("\n"); } return 0; } |
题目
在一周训练结束后,得到了这周的签到表,现在需要统计这周训练时长。共有n个人参加这周培训,每晚训练前需要签到,如果按时训练,会在签到表标注'o',如果缺训,会标注'x'。每周训练三次,每次训练时间为3小时,如果缺席,需要补训,每次缺训需要补训3小时,在补训签到表签到签退。补训签到表一共签了m行,每行有补训人的姓名和时间。你需要按签到表顺序输出每个人的训练总时长,如果达到24小时或以上,输出24:00,如果不足9小时,需要在后面标注缺训时长,时间与最长的姓名之间有一个空格,其它与该行对齐,具体格式见样例。
输入
输入第一行一个整数T,代表接下来有T组测试数据。
接下来T组,每组第一行有2个整数n,m,接下来n行,每行有一个字符串,表示参加训练人的名字,接下来有三个字符'o'或'x','o'表示签到,'x'表示缺席,接下来m行,每行有一个字符串,表示补训人的名字,接下来有两个时间,用hour:minute的形式给出表示签到和签退的时间。
数据范围:1≤T≤10,0≤m<n≤1000,1≤len(name)≤20,0≤hour≤23,0≤minute≤59,同一次补训签到签退在同一天,没有两个人的名字相同.
样例输入
2
8 16
guozhe o o o
guozhenwei o o x
jiangjiawei o x o
shaqingrui o x x
sunhaoyu x o o
sunhongjia x o x
wangyan x x o
wangyu x x x
sunhongjia 08:00 09:00
sunhongjia 09:01 10:01
sunhongjia 10:02 11:02
sunhongjia 11:03 12:03
sunhongjia 12:04 13:04
sunhongjia 13:05 14:05
wangyan 18:00 21:00
wangyan 18:00 21:00
jiangjiawei 13:30 15:00
jiangjiawei 09:00 10:30
guozhenwei 23:58 23:59
guozhenwei 00:00 02:59
sunhaoyu 00:00 23:59
shaqingrui 08:00 11:00
shaqingrui 13:00 16:00
wangyu 07:07 07:08
3 5
a o x o
b x o x
c o x o
c 12:00 14:00
a 00:00 02:00
b 12:34 21:43
c 23:00 23:59
a 19:00 19:30
样例输出
guozhe 09:00
guozhenwei 09:00
jiangjiawei 09:00
shaqingrui 09:00
sunhaoyu 24:00
sunhongjia 09:00
wangyan 09:00
wangyu 00:01(-08:59)
a 08:30(-00:30)
b 12:09
c 08:59(-00:01)