例题:https://ac.nowcoder.com/acm/contest/1838/I
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <map>
#include <algorithm>
#include <stack>
#include <queue>
#include <cmath>
using namespace std;
struct sss
{
string mingzi;
int paiming;
int num;
int zongshijian;
int A[20]; //记录是否A了,且A了之后的提交是多少
int W[20]; //记录仔没交之前提交了几次
int first[20]; //记录A了这道题当时所用的时间
}l[100];
bool cmp (sss x,sss y)
{
if(x.num!=y.num)return x.num>y.num;
else if(x.zongshijian!=y.zongshijian)return x.zongshijian<y.zongshijian;
else return x.mingzi<y.mingzi;
}
int main ()
{
map<string,int>mp;
int T,m,n,q;
string duiwu;
int shijian;
char timu;
string zhuangtai;
cin >> T;
for (int I=1;I<=T;I++)
{
mp.clear();
cin >> m >> n ;
for (int i=1;i<=n;i++)
{
cin >> l[i].mingzi;
mp[l[i].mingzi]=i;
l[i].num=0;
l[i].zongshijian=0;
for (int j=1;j<=20;j++)
{
l[i].first[j]=0;
l[i].W[j]=0;
l[i].A[j]=0;
}
}
cin >> q;
for (int i=1;i<=q;i++)
{
cin >> duiwu >> shijian >> timu >> zhuangtai;
int a=mp[duiwu]; //最关键的两行代码
int b=timu-'A'+1 ;
if(zhuangtai=="Compilation-Error") continue;
if(l[a].A[b]!=0) continue;
if(zhuangtai=="Accepted")
{
l[a].A[b] = l[a].W[b] + 1;
l[a].first[b] = shijian ;
l[a].zongshijian += shijian + 20*l[a].W[b];
l[a].num++;
}
else l[a].W[b]++;
}
sort (l+1,l+1+n,cmp); //sort排序括号里的东西可不能乱写,加n就是加n,不能加100,或者一些其它的数
for (int i=1;i<=n;i++)
{
l[i].paiming=i;
if(l[i].num==l[i-1].num && l[i].zongshijian==l[i-1].zongshijian)
{
l[i].paiming=l[i-1].paiming;
cout << l[i].paiming << " " ;
}
else cout << l[i].paiming << " " ;
cout << l[i].mingzi << " " << l[i].num << " " << l[i].zongshijian ;
for (int j=1;j<=m;j++)
{
cout << " " ;
if(l[i].A[j]!=0) cout << "+" << l[i].A[j] << "(" << l[i].first[j] << ")" ;
else cout << "-" << l[i].W[j] ;
}
cout << endl;
}
if(I<T) cout << endl;
}
return 0;
}


京公网安备 11010502036488号