题意
根据提交时间及判题状态,模拟 ICPC 赛制的比赛结果(过题数及总用时,包括罚时)。
解题思路
简单模拟即可,STL 的 map 记录 对应 problem ID 的通过情况,已经通过记录为 mp[pid] = 通过时间
,未通过的记录为 mp[pid]= -(错误提交次数)
,尚未提交的应满足 mp.find(pid) == mp.end()
代码
#include<bits/stdc++.h>
using namespace std;
char s[5];
map<int, int> mp;
int main()
{
int T, N, M;
scanf("%d",&T);
while(T--)
{
mp.clear();
int solved = 0, penalty = 0;
scanf("%d %d",&N,&M);
for(int i=0, pid, h, m;i<M;i++)
{
scanf("%d %d:%d %s", &pid, &h, &m, s);
if(s[0] == 'A') {
m += h*60;
if(mp.find(pid) != mp.end() && mp[pid] >= 0) continue;
solved++;
penalty += m + mp[pid]*(-20);
mp[pid] = m;
} else {
if(mp.find(pid) != mp.end()){
if(mp[pid]<0) mp[pid]--;
else continue;
} else {
mp[pid] = -1;
}
}
}
printf("%d %d\n", solved, penalty);
}
}