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