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
对于每组数据,输出测试点编号和总耗电量。
Sample Input
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
Sample Output
Case 1: 9672 Case 2: 478800
这个题目很大一部分功夫在于输入然后保存输入的时间和得分(所得分数是累加的),然后就是把显示分数的电极管的总条数求出来;
还有就是注意循环刚刚开始while里面填个1直接输出超时,然后改了一下才过的;
#include <iostream>
#include <vector>
#include <stdio.h>
#include <string>
#include <string.h>
using namespace std;
int show[]={6,2,5,5,4,5,6,3,7,6};//显示0~9这几个数字时每一个电极管所对应的条数;
int count(int x)//显示一个分数是电极管所对应的总条数;
{
int sum=0;
if (x>=100)
{
sum+=show[x/100];
sum+=show[x/10%10];
sum+=show[x%10];
}
if (x>=10&&x<100)
{
sum+=show[x%10];
sum+=show[x/10];
}
if (x>=0&&x<=9)
sum+=show[x];
return sum;
}
struct times
{
int hour;
int minute;
int second;
int score;
};//保存上一次分数变动的时间和分数;
int main()
{
vector<times> home;//记录主队的时间分数,因为里面装的是结构体
vector<times> guest;
char ch[10];
int score;
int home_cost,guest_cost;
int hour,minute,second;
string start;
int sing=0;
times c;
int n=1;
while (cin>>start&&n<=100)
{
if(start=="START")
{
scanf("%d:%d:%d",&hour,&minute,&second);
guest_cost=0;
home_cost=0;
c.hour=hour;
c.minute=minute;
c.second=second;
c.score=0;//开始两队得分都为零
home.push_back(c);
guest.push_back(c);
continue;
}
if (start=="SCORE")
{
scanf("%d:%d:%d %s %d",&hour,&minute,&second,&ch,&score);//输入得分的时间和所得分数,如果直接用一个字符串输入那么会很难转换;
if (strcmp(ch,"home"))//计算两个队的得分;
{
c.hour=hour;
c.minute=minute;
c.second=second;
score+=guest[guest.size()-1].score;
c.score=score;//累加分数
guest_cost+=count(guest[guest.size()-1].score)*(3600*(hour-guest[guest.size()-1].hour)+60*(minute-guest[guest.size()-1].minute)+(second-guest[guest.size()-1].second));//guest;
guest.push_back(c);//保存所得分数的时间
}
else
{
home_cost+=count(home[home.size()-1].score)*(3600*(hour-home[home.size()-1].hour)+60*(minute-home[home.size()-1].minute)+(second-home[home.size()-1].second));
c.hour=hour;
c.minute=minute;
c.second=second;
score+=home[home.size()-1].score;
c.score=score;//累加分数
home.push_back(c);//保存所得的分数和时间
}
}
if(start=="END")
{
scanf("%d:%d:%d",&hour,&minute,&second);
if((home.size()-1)==0)
home_cost=6*(3600*(hour-home[(home.size()-1)].hour)+60*(minute-home[(home.size()-1)].minute)+(second-home[(home.size()-1)].second));//计算主队没得一份的情况;
else
home_cost+=count(home[home.size()-1].score)*(3600*(hour-home[home.size()-1].hour)+60*(minute-home[home.size()-1].minute)+(second-home[home.size()-1].second));
if((guest.size()-1)==0)
guest_cost=6*(3600*(hour-guest[(guest.size()-1)].hour)+60*(minute-guest[(guest.size()-1)].minute)+(second-guest[(guest.size()-1)].second));//计算客队没得一分的情况;
else
guest_cost+=count(guest[guest.size()-1].score)*(3600*(hour-guest[guest.size()-1].hour)+60*(minute-guest[guest.size()-1].minute)+(second-guest[guest.size()-1].second));//guest;
printf("Case %d: %d\n",n,guest_cost+home_cost);
n++;
}
}
return 0;
}