CSU 1507: 超大型LED显示屏(数学)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1507

 

 

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

HINT

 

Source

湖南省第十届大学生计算机程序设计竞赛

 

 

 

代码如下:

 

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

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值