分析
主要就是多次ac取时间最短的那次。
-=和%=1000的问题
如果没有ac则罚时不计,都知道的 我却忘考虑了。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
struct node{
int id,rtm;
string ans,tm;
}a[maxn];
bool cmp(node a,node b){
return a.tm<b.tm;
}
bool vis[maxn];
bool isac[maxn];
int main(){
int t,n,m;
scanf("%d",&t);
while(t--){
int sum=0,cnt=0;
memset(vis,0,sizeof(vis));
memset(isac,0,sizeof(isac));
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
cin>>a[i].id>>a[i].tm>>a[i].ans;
//scanf("%d %s %s",&a[i].id,a[i].tm,a[i].ans); scanf不能读string
a[i].id-=1000;
a[i].rtm=(a[i].tm[1]-48)*60+(a[i].tm[3]-48)*10+(a[i].tm[4]-48);//处理时间
if(a[i].ans=="AC") isac[a[i].id]=1; //最终是否ac
//cout<<a[i].rtm<<endl;
}
sort(a,a+m,cmp);//不用
for(int i=0;i<m;i++){
if(vis[a[i].id]) continue;
if(a[i].ans=="AC"){
sum+=a[i].rtm;
vis[a[i].id]=1;
cnt++;
}
else {
if(isac[a[i].id]==1) sum+=20;
}
}
printf("%d %d\n",cnt,sum);
}
return 0;
}