Problem C: 龟兔赛跑之后
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 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
Sample Input
Sample Output
#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
****************************************************************/