您的位置:首页 > 其它

CSU1507 超大型LED显示屏_模拟题

2017-08-14 19:22 225 查看
**CSU1507 超大型LED显示屏_模拟题**
Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 39     Solved: 14


Description



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

AC代码

思路很清晰,写的有点多

//模拟题,每次读一行,分别计算时间和耗电量
#include <stdio.h>

int Isstart(char c[])  //START
{
if(c[1] == 'T' && c[2] == 'A')
return 1;
else
return 0;
}

int Isend(char c[])  //END
{
if(c[0] == 'E' && c[1] == 'N')
return 1;
else
return 0;
}

int Countss(char c[])  //以秒计算时间
{
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;
}

int horg(char c[])  //home or guest
{
if(c[15] == 'h')
return 1;
else
return 0;
}

int Countscore(int initial, char c[])  //home or guest的得分
{
if(horg(c))
return initial + (c[20] - '0');
else
return initial + (c[21] - '0');
}

//计算当前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 led[11] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};  //对应的耗电量
char s[30];
int caseout = 0;  //编号
int charge = 0;  //统计最终耗电量

while(gets(s))
{
int time1, time2;
int homec, guestc, homesco, guestsco;

if(Isstart(s))  //START
{
time1 = Countss(s);
homesco = 0;
guestsco = 0;
homec = 6;
guestc = 6;
}
else if(Isend(s))  //END
{
caseout++;
time2 = Countss(s);
charge += (time2 - time1) * (homec + guestc);
printf("Case %d: %d\n", caseout, charge);
charge = 0;  ////
}
else  //SCORE
{
time2 = Countss(s);
charge += (time2 - time1) * (homec + guestc);
time1 = time2;  ////

if(horg(s))  //home得分, guest不变
{
homesco = Countscore(homesco, s);  //当前得分
homec = Countccc(homesco, s, led);
}
else  //guest得分, home不变
{
guestsco = Countscore(guestsco, s);
guestc = Countccc(guestsco, s, led);
}
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm入门