湖南省第十届大学生计算机程序设计竞赛第五题(模拟题)

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;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值