Problem C: 龟兔赛跑之后 信息杯班级对抗赛

Problem C: 龟兔赛跑之后

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 52   Solved: 14
[ Submit][ Status][ Web Board]

Description

自从上次输掉了赛跑,兔子一直不甘心,想要和乌龟再比一场,一雪前耻。但不巧的是,乌龟出门打酱油过马路的时候由于躲闪不及被车撞了,俩后腿全折了。好在折了后腿还可以用前爪敲键盘,于是它们决定在代码上大战三百回合。

这场比赛借鉴了ACM的规则,如下:
1.比赛结束后,以解出问题的多少进行比较,解出问题最多者获胜。
2.若解出问题数目相同,则用时最少者获胜。
3.总用时为每个解出了的问题所用时间之和。所用时间指从比赛开始到提交代码通过检测所经过的时间加上该问题的罚时。罚时指当某问题提交代码未通过检测时,该问题所用时间需加上20分钟。
4.只有当问题被解出时总用时才会加上该问题所用时间。
例如,解出了两个问题,第一个问题在第一小时解出,在此之前错了一次,第二个问题在第二小时解出,在此之前错了两次,则总用时为四小时。
5.如果某题已经通过测试,则之后关于该题的提交自动无视。

不幸的是,当比赛刚刚结束尚未统计出成绩来的时候,服务器因为年久失修,烧了,硬盘里的数据被损坏了,唯一抢救出来的数据只有乌龟和兔子的交题记录。乌龟和兔子都特别地懒(虽然它们对于比赛很积极),所以它们把记录给了你,让你帮忙来评判,这次比赛到底谁赢了。

Input

第一行为一个整数N,表示后面有N条提交记录(0≤N≤1000)。
接下来有N行提交记录,按时间顺序给出。每条记录包含四三部分:提交时间,题目,提交者,测试结果。这四部分两两之间用“|”分割。
提交时间的格式为:小时:分钟:秒,保证输入的时间有意义且在5小时之内。
题目为数字,保证在1到20之间。
提交者用“T”表示乌龟,“R”表示兔子。
提交结果可能有“AC”,“WA”,“RE”,“TLE”,“MLE”,“OLE”,“PE”,其中只有“AC”代表通过测试。

Output

输出仅一行,若乌龟获胜,输出“Turtle wins.”,若兔子获胜,输出“Rabbit wins.”,若双方打成平手(即时间和题数均相同),输出“Again!”。

Sample Input

400:00:18|5|T|OLE
00:00:19|5|R|AC
00:00:19|5|T|AC
00:00:29|15|R|OLE

Sample Output

Rabbit wins.

题意很清晰,主要是代码的设计和表述上,代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
char ok[3] = {'A','C'};
typedef struct
{
    int pro_so;
    int time;
 
}re;  //利用结构体同时保存一个选手的两个信息,解决的题目数和所用时间(按秒)
int pd(int a[],int t)
{
    if(a[t] > 0)
        return 1;
    return 0;
}
int judge(char a[])
{
    return strcmp(ok,a);
}
int main()
{
    int n;
    re tz,wg;
    tz.pro_so = wg.pro_so = 0;
    tz.time = wg.time = 0;
 
    int i,s,f,m,num,time;
    int tzso[105],wgso[105];
 
    memset(tzso,0,sizeof(tzso));
    memset(wgso,0,sizeof(wgso));
 
    char peo,res[10];
    scanf("%d",&n);
    for(i = 0;i < n;i++)
    {
        getchar();
        memset(res,0,sizeof(res));
        scanf("%d:%d:%d|%d|%c|%s",&s,&f,&m,&num,&peo,res);  //格式化输入即可
        //printf("%d:%d:%d|%d|%c|%s",s,f,m,num,peo,res);
        time = s*3600+f*60+m;  //按秒计算时间,免去连续比较时分秒
        int pdr = judge(res);//when pdr == 0 is AC
        if(pdr == 0)//AC
        {
            if(peo == 'T')
            {
                if(pd(wgso,num) == 0)
                {
                    wg.time = -wgso[num]+time;
                    wg.pro_so++;
                    wgso[num] = -wgso[num];
                }
            }
            else if(peo == 'R')
            {
                if(pd(tzso,num) == 0)
                {
                    tz.time = -tzso[num]+time;
                    tz.pro_so++;
                    tzso[num] = -tzso[num];
                }
            }
        }
        else//wrong
        {
            if(peo == 'T')
                {
                    if(wgso[num] <= 0)
                    wgso[num] -= 20;
                }
            else if(peo == 'R')
                {
                    if(tzso[num] <= 0)
                    tzso[num] -= 20;
                }
        }
 
    }
//    printf("tz so: %d,time %d\n",tz.pro_so,tz.time);
//    printf("wg so: %d,time %d\n",wg.pro_so,wg.time);  输出中间变量
    if(tz.pro_so > wg.pro_so)
        printf("Rabbit wins.\n");
    else if(wg.pro_so > tz.pro_so)
        printf("Turtle wins.\n");
    else if(tz.pro_so == wg.pro_so)
    {
        if(tz.time < wg.time)
            printf("Rabbit wins.\n");
        else if(tz.time > wg.time)
            printf("Turtle wins.\n");
        else if(tz.time == wg.time)
            printf("Again!\n");
    }
    return 0;
}
 
/**************************************************************
    Problem: 1625
    User: team47
    Language: C
    Result: Accepted
    Time:0 ms
    Memory:748 kb
****************************************************************/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值