-
描述
-
在编程啦比赛的记分板上,有一列叫做“罚时”,这个奇怪的数字究竟是怎么算出来的呢?
留意的同学可能知道,记分板的“查看记分详单”页面,有这么一段注释:
注:(X/Y) —— X表示该题提交次数,Y表示首次通过该题的时间,单位为分钟。
对通过的题计算罚时,计算方式为 (X-1)*20 + Y。未通过的题不计算罚时。具体说来,其中X表示该题首次正确提交之前(包括正确那次)该题的提交次数,比如某次上机中,豆豆同学的提交记录如下(比赛开始时间为14:30):
· B Accepted (AC) 14:52
· A Wrong Answer (WA) 14:58
· A Wrong Answer (WA) 14:59
· A Wrong Answer (WA) 15:00
· A Accepted (AC) 15:05
· C Wrong Answer (WA) 15:12
· C Wrong Answer (WA) 15:14
· C Accepted (AC) 15:15
· D Accepted (AC) 15:21
· A Presentation Error (PE) 15:32
· A Accepted (AC) 15:33
· E Time Limit Exceeded (TLE) 15:55
则对于A题,X=4(计算该题的X时无视该题AC后的提交记录以及其他题的记录),Y=35(分钟),由于通过该题带来的罚时为:(4-1)*20+35=95;
对于E题,罚时为零,因为这题始终没有通过(Accepted)。
现在,告诉你某次上机中,豆豆的所有提交记录,你能帮助豆豆计算出罚时吗?
-
输入
-
第一行为一个整数M,表示有M组数据(M<10)。
对于每组数据,第一行为一个整数N,表示共有N条提交记录(N<20)。
以下N行,每行有两个整数P、T和一个字符串S,表示第P题在比赛开始后第T分钟有一次提交(1<=P<=5,0<=T<=150),结果为S,S为以下7种情况之一(缩写):
· Accepted (AC)
· Presentation Error (PE)
· Compilation Error (CE)
· Wrong Answer (WA)
· Runtime Error (RE)
· Time Limit Exceeded (TLE)
· Memory Limit Exceeded (MLE)
详见样例,其中N条记录已按照时间顺序排列。
输出
-
对于每组数据输出一行,即总罚时(各题的罚时之和)。
样例输入
-
2
2
1 10 WA
1 15 AC
4
1 10 WA
2 15 AC
2 17 PE
2 17 AC
样例输出
-
35
15
模拟题
#include <stdio.h> #include <string.h> int main() { int number,t,tt; int n,i; int no,time; char upset[6]; char a[6][6];//题目状态 int b[6]; //题号 int flag[6];//通过情况 int count[6];//计算次数 int temp[6]; int sum; scanf("%d",&number); for (t=1;t<=number;t++) { sum=0; for(i=0;i<6;i++) { b[i]=0; count[i]=0; flag[i]=0; temp[i]=0; } scanf("%d",&n); for(tt=1;tt<=n;tt++) { scanf("%d %d %s",&no,&time,&upset); strcpy(a[no],upset); b[no]=1; if(a[no][0]=='A') { if(flag[no]!=1) { flag[no]=1; temp[no]=time; } } else { if(flag[no]!=1) count[no]++; } } for(i=0;i<6;i++) { if(b[i]==1) { if(flag[i]==1) { sum+=(count[i])*20+temp[i]; } } } printf("%d\n",sum); } return 0; }
-