Automatic Judge HDU - 6023
2019年某日,正睿OI训练营迎来了一场六一节acm专场。
在五个小时的比赛时间里,你可以提交代码到比赛页面,然后评测机会给你返回一个结果。
评测机一共可能会返回下面几种结果:
- Accepted (AC) : 你通过了此题。
- Presentation Error (PE) : 你的代码有一些格式上的问题。
- Wrong Answer (WA) : 你的答案与标准程序输出不符。
- Runtime Error (RE) : 你的程序运行时出现错误。
- Time Limit Exceeded (TLE) : 你的程序运行超时。
- Memory Limit Exceeded (MLE) : 你的程序空间炸了。
- Output Limit Exceeded (OLE) : 你的程序输出的文件太大了。
- Compilation Error (CE) : 你的程序编译错误。
对于每份提交,如果这是这道题第一次AC,那么这就意味着你通过了这道题,当前的时间就是你通过这道题的时间,这个时间会被累加进你队伍的罚时。同时,在你通过了一道题之前,每一次不成功的提交都会为你的这道题带来20分钟的罚时(如果你没有通过这道题就不会计算进队伍的罚时)。
现在告诉你这场比赛的题数和颜良的提交记录。你需要写一个程序来计算颜良通过了多少道题以及罚时共多少。
Input
输入格式的包含一个整数 T ,表示数据组数.
对于每组数据,第一行有两个整数 n 和 m,表示这场比赛的题数和颜良共提交了多少次. 题目被编号为 1001, 1002, ..., 1000+n.
接下来的 m行, 每行包含一个整数x和两个字符串 t(00:00~ 05:00) 和 s, 表示他们的队伍在t时间提交了 x题 ,并且最终返回的结果是 s. t 以 HH:MM的格式给出,s的可能有{AC, PE, WA, RE, TLE, MLE, OLE}. 保证按照时间顺序给出提交记录,并且他不会在同一分钟提交两次。
Output
对于每组数据,输出一行两个数字 A 和 B, 表示他通过的题数和他最终的罚时(以分钟为单位)。
Sample Input
1
3 5
1002 00:02 AC
1003 00:05 WA
1003 00:06 WA
1003 00:07 AC
1002 04:59 AC
Sample Output
2 49
分析
题意很简单,直接模拟,但是需要注意,多组数据,并且AC过之后将不再对该题计时。
可以选择记录该题是否AC,没有就罚时,直到 AC。
最后统计AC的题目总罚时。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e6+10,INF=0x3f3f3f3f;
struct T{
int time, flag;
}p[N]; // p[i] 第 i 题
int main(){
// freopen("data.in", "r", stdin);
int t,n,m; scanf("%d", &t);
int x,a,b; char c[5];
while(t--){
memset(p, 0, sizeof(p)); //注意多组数据
scanf("%d%d", &n,&m);
for(int i=1; i<=m; i++){
scanf("%d %d:%d %s",&x,&a,&b,&c);
if(p[x].flag==0){
if(strcmp("AC", c)!=0) p[x].time += 20;
else p[x].flag=1, p[x].time += a*60+b;;
}
}
a=b=0;
for(int i=0; i<N; i++){
if(p[i].flag==1) a++, b+=p[i].time;
}
printf("%d %d\n", a,b);
}
return 0;
}
标签:HDU,WA,00,int,AC,这道题,提交,Judge,6023
From: https://www.cnblogs.com/hellohebin/p/16718900.html