#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
#define MAXN 2005
struct data{
int grade;
string name;
};
bool cmp(const data &a,const data &b){
return a.grade>b.grade;
}
int findname(data a[],int n,string name){
for(int i=0;i<n;i++){
if(a[i].name==name){
int j;
for(j=i;a[j].grade==a[j-1].grade;j--);
return j+1;
}
}
return -1;
}
int main()
{
int nn,qn;
cin>>nn>>qn;
data A[MAXN],C[MAXN],M[MAXN],E[MAXN];
for(int i=0;i<nn;i++){
string name;
int c,m,e;
cin>>name>>c>>m>>e;
A[i].name=name;
A[i].grade=c+m+e;
C[i].name=name;
C[i].grade=c;
M[i].name=name;
M[i].grade=m;
E[i].name=name;
E[i].grade=e;
}
sort(A,A+nn,cmp);
sort(C,C+nn,cmp);
sort(M,M+nn,cmp);
sort(E,E+nn,cmp);
while(qn--){
string name;
int res[4];
cin>>name;
res[0]=findname(A,nn,name);
if(res[0]<0){
cout<<"N/A"<<endl;
continue;
}
res[1]=findname(C,nn,name);
res[2]=findname(M,nn,name);
res[3]=findname(E,nn,name);
int minr=min(min(res[0],res[1]),min(res[2],res[3]));
cout<<minr<<" ";
if(minr==res[0]){
cout<<'A'<<endl;
}else if(minr==res[1]){
cout<<'C'<<endl;
}else if(minr==res[2]){
cout<<'M'<<endl;
}else if(minr==res[3]){
cout<<'E'<<endl;
}
}
}
关于排序一定要考虑相等的处理
若前两者分数相同,名次应该是
1 1 3 4 5
而不是
1 2 3 4 5