只有#7和#8过了。。。
#include<bits/stdc++.h>
using namespace std;
struct node{
int sumac,id,tme;
string name;
bool ac[30]={0},ac1[30]={0};
int tme2[30]={0},wa[30]={0},wa1[30]={0};
}team[100005];
map<string,int> mp;
int n,m,k,now=0,x,y,z;
char pro;
string nam,rec;
bool cmp(node x,node y){
if(x.sumac!=y.sumac) return x.sumac>y.sumac;
if(x.tme!=y.tme) return x.tme<y.tme;
return x.id<y.id;
}
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=k;i++){
bool fb=false;
scanf("%d:%d:%d %c",&x,&y,&z,&pro);
cin>>nam;
getline(cin,rec);
if(x*3600+y*60+z>4*3600) fb=true;
if(mp[nam]==0){
now++;
mp[nam]=now;
team[now].id=now;
team[now].name=nam;
}
if(rec[1]=='A'){
if((!fb)&&(!team[mp[nam]].ac[pro-'A'])){
team[mp[nam]].ac[pro-'A']=true;
++team[mp[nam]].sumac;
team[mp[nam]].tme+=x*60+y+team[mp[nam]].wa[pro-'A']*20;
}else if(fb&&(!team[mp[nam]].ac[pro-'A'])&&(!team[mp[nam]].ac1[pro-'A'])){
team[mp[nam]].ac1[pro-'A']=true;
team[mp[nam]].tme2[pro-'A']=x*60+y;
}
}else if((!team[mp[nam]].ac[pro-'A'])&&(!team[mp[nam]].ac1[pro-'A'])){
if(!fb) team[mp[nam]].wa[pro-'A']++;
else team[mp[nam]].wa1[pro-'A']++;
}
}
sort(team+1,team+now+1,cmp);
//for(int i=now;i>0;i--) cout<<team[i].name<<'\n';
for(int i=now;i>0;i--){
cout<<team[i].name<<'\n';
bool f=false;
for(int j=0;j<=25;j++){
if(!team[i].ac[j]&&team[i].ac1[j]){
team[i].ac[j]=true;
team[i].sumac++;
team[i].tme+=team[i].tme2[j]+team[i].wa[j]*20;
if(cmp(team[i],team[i-1])&&i>1){
f=true;
break;
}
}
}
if(f){
int res=i;
while(res>1&&cmp(team[res],team[res-1])){
swap(team[res],team[res-1]);
res--;
}
i++;
}
}
}