Description
你是学生会体育部长,负责组织一年一度的校篮球比赛。马上就要决赛了,你希望吸引更多的
人来看比赛,因此打算更新一下设备,用一个超大的 LED 屏幕来显示比分。当然,电也不是
不要钱的,所以你决定先分析一下往年的比赛,估计一下大概要耗多少电。
如上图,每个数字由 7 条线段组成,每条亮着的线段每秒钟耗电量为 1 个单位。线段不亮的时
候不耗电。为了省电,比分不显示前导 0(不过 0 分的时候要显示数字 0)。
你的 LED 显示屏共包含 6 个数字,即双方的比分各有 3 位数。
Input
输入包含不超过 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 秒钟。
Output
分析:
模拟题。每次按字符串读入一行,计算得分和分数花费的电量。详见代码注释。思路参考了大佬的。
ac代码
#include<stdio.h>
int SS(char c[]) //把时间换算成s秒
{
int h, m, s;//小时分钟秒
if(c[0] == 'S')
{
h = 3600 * (10 * (c[6] - '0') + (c[7] - '0'));
m = 60 * (10 * (c[9] - '0') + (c[10] - '0'));
s = 10 * (c[12] - '0') + (c[13] - '0');
}
else if(c[0] == 'E')
{
h = 3600 * (10 * (c[4] - '0') + (c[5] - '0'));
m = 60 * (10 * (c[7] - '0') + (c[8] - '0'));
s = 10 * (c[10] - '0') + (c[11] - '0');
}
return h + m + s;
}
//计算当前home或者guest耗电量,home得分guest耗电量不变,guest得分home耗电量不变
int countccc(int homeguest, char c[], int le[])
{
int hgc;
if(homeguest <= 9) //个位数
{
for(int i= 0; i < 10; i++)
if(homeguest == i)
{
hgc = le[i];
break;
}
}
else if(homeguest >= 10 && homeguest <= 99) //两位数
{
int shang = homeguest / 10;
int yushu = homeguest % 10;
hgc = 0;
for(int i = 0; i < 10; i++)
{
if(shang == i)
hgc += le[i];
if(yushu == i)
hgc += le[i];
}
}
else if(homeguest >= 100 && homeguest <= 999) //三位数
{
int shan = homeguest / 100;
int shiw = homeguest / 10 % 10;
int gew = homeguest % 10;
hgc = 0;
for(int i = 0; i < 10; i++)
{
if(shan == i)
hgc += le[i];
if(shiw == i)
hgc += le[i];
if(gew == i)
hgc += le[i];
}
}
return hgc;
}
int main()
{
int time1,time2,h,gu,hc,gc;
int led[11] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6}; //对应的耗电量
char s[50];
int num=0;//num计数测试样例的个数
int cost=0;//总费电
while(gets(s))
{
if(s[0]=='S'&&s[1]=='T') //如果开头是start
{
time1=SS(s);//将开始时间换算成秒
h=0; //此时home得分为0
gu=0; //guest得分为0;
hc=6; //home费电6
gc=6; //guest费电6
}
else if(s[0]=='E'&&s[1]=='N') //如果是结束时间
{
num++;
time2=SS(s);
cost+=(time2-time1)*(hc+gc);
printf("Case %d: %d\n",num,cost);//输出
cost=0;////////记得输出完一组后更新cost=0!!!!错到了这里,wa!
}
else
{
time2=SS(s); //如果是中间刷新分的时间
cost+=(time2-time1)*(hc+gc);
time1=time2;
if(s[15]=='h') //如果home得分,guest不变
{
h+=s[20]-'0'; //得分
hc=countccc(h,s,led);
}
else //如果guest得分,home不变
{
gu+=s[21]-'0';//guest得分
gc=countccc(gu,s,led); //更新了分数后guest电费
}
}
}
return 0;
}