题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1507
输入包含不超过100组数据。每组数据第一行为"START hh:mm:ss",表示比赛开始时刻为hh:mm:ss。最后一行为"END hh:mm:ss",即比赛结束时刻。二者之间至少会有一个SCORE信息,格式为"SCORE hh:mm:ss team score",其中team要么是"home"(主场)要么是"guest"(客场), score表示得分,为1,2或者3。这些信息保证按照时间从早到晚的顺序排列,且任意两条SCORE信息的时刻均不相同。比赛开始时间不会早于9:00,结束时间不会晚于同一天的21:00。注意,如果比赛开始时间为09:00:00,结束时间为09:00:01,比赛长度为1秒钟,而不是2秒钟。
对于每组数据,输出测试点编号和总耗电量。
START 09:00:00
SCORE 09:01:05 home 2
SCORE 09:10:07 guest 3
END 09:15:00
START 09:00:00
SCORE 10:00:00 home 1
SCORE 11:00:00 home 1
SCORE 12:00:00 home 1
SCORE 13:00:00 home 1
SCORE 14:00:00 home 1
SCORE 15:00:00 home 1
SCORE 16:00:00 home 1
SCORE 17:00:00 home 1
SCORE 18:00:00 home 1
SCORE 19:00:00 home 1
SCORE 20:00:00 home 1
END 21:00:00
Case 1: 9672
Case 2: 478800
代码如下:
#include<stdio.h> #include<string.h> int ti[1000]; int find(int a)//多少灯管 { if(a==0) return 6; if(a==1) return 2; if(a==2) return 5; if(a==3) return 5; if(a==4) return 4; if(a==5) return 5; if(a==6) return 6; if(a==7) return 3; if(a==8) return 7; if(a==9) return 6; } int get(int a) { int sum=0; if(a==0) return 6; while(a) { sum+=find(a%10); a/=10; } return sum; } int main() { int cas=1; char ss[100],s[100]; int sta_time,end_time; int time,pre,sc; int a,b,c,f[10]; while(scanf("%s %d:%d:%d",ss,&a,&b,&c)!=EOF) { memset(f,0,sizeof f); sta_time=a*3600+b*60+c; pre=sta_time; int ans=0; while(1) { scanf("%s %d:%d:%d",ss,&a,&b,&c); if(strcmp(ss,"END")==0) { end_time=a*3600+b*60+c; break; } scanf("%s %d",s,&sc); time=a*3600+b*60+c; ans+=(get(f[1])+get(f[0]))*(time-pre); pre=time; if(strcmp(s,"home")==0) f[0]+=sc; else f[1]+=sc; } ans+=(get(f[1])+get(f[0]))*(end_time-pre); printf("Case %d: ",cas++); printf("%d\n",ans); } return 0; }
原文地址:http://blog.csdn.net/u012860063/article/details/41777691