调了 n105105105 个小时。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int dd,n;
struct S{
string name,zy;
int bg,dj,id;
}t[115];
int c(string s){
if(s=="BangZhu") return 0;
if(s=="FuBangZhu") return 1;
if(s=="HuFa") return 2;
if(s=="ZhangLao") return 3;
if(s=="TangZhu") return 4;
if(s=="JingYing") return 5;
return 6;
}
bool cmp(S x,S y){
if(x.bg==y.bg) return x.id<y.id;
return x.bg>y.bg;
}
bool cmp2(S x,S y){
if(c(x.zy)==c(y.zy)){
if(x.dj==y.dj) return x.id<y.id;
return x.dj>y.dj;
}
else return c(x.zy)<c(y.zy);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>dd;
string a,b;
int c,d;
for(int i=1;i<=dd;i++){
cin>>a>>b>>c>>d;
if(b=="BangZhu"||b=="FuBangZhu") cout<<a<<' '<<b<<' '<<d<<'\n';
else{
n++;
t[n].name=a;
t[n].zy=b;
t[n].bg=c;
t[n].dj=d;
t[n].id=n;
}
}
sort(t+1,t+n+1,cmp);
for(int i=1;i<=n;i++){
if(i<=2) t[i].zy="HuFa";
else if(i<=6) t[i].zy="ZangLao";
else if(i<=13) t[i].zy="TangZhu";
else if(i<=38) t[i].zy="JingYing";
else t[i].zy="BangZhong";
}
sort(t+1,t+n+1,cmp2);
for(int i=1;i<=n;i++)
cout<<t[i].name<<' '<<t[i].zy<<' '<<t[i].dj<<'\n';
return 0;
}