例题: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;
}