#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
using namespace std;
#define Min(a,b)(a<b?a:b)
int n,m;
struct student
{
int id,ctest,math,english;
double avg;
int crank,mrank,erank,arank;
int bestrank;
string bsetrankname;
};
student TT[2005];
bool cmpa(student a,student b)
{
return a.avg>b.avg;
}
bool cmpc(student a,student b)
{
return a.ctest>b.ctest;
}
bool cmpm(student a,student b)
{
return a.math>b.math;
}
bool cmpe(student a,student b)
{
return a.english>b.english;
}
void MakeaRank()
{
for(int i=0;i<n;i++)
{
if(i==0)
{
TT[i].arank=1;
continue;
}
if(TT[i].avg!=TT[i-1].avg)
{
TT[i].arank=i+1;
}
else
{
TT[i].arank=TT[i-1].arank;
}
}
}
void MakecRank()
{
for(int i=0;i<n;i++)
{
if(i==0)
{
TT[i].crank=1;
continue;
}
if(TT[i].ctest!=TT[i-1].ctest)
{
TT[i].crank=i+1;
}
else
{
TT[i].crank=TT[i-1].crank;
}
}
}
void MakemRank()
{
for(int i=0;i<n;i++)
{
if(i==0)
{
TT[i].mrank=1;
continue;
}
if(TT[i].math!=TT[i-1].math)
{
TT[i].mrank=i+1;
}
else
{
TT[i].mrank=TT[i-1].mrank;
}
}
}
void MakeeRank()
{
for(int i=0;i<n;i++)
{
if(i==0)
{
TT[i].erank=1;
continue;
}
if(TT[i].english!=TT[i-1].english)
{
TT[i].erank=i+1;
}
else
{
TT[i].erank=TT[i-1].erank;
}
}
}
void MakeBest()
{
for(int i=0;i<n;i++)
{
int tmp=TT[i].arank;
string ss="A";
if(TT[i].crank<tmp)
{
tmp=TT[i].crank;
ss="C";
}
if(TT[i].mrank<tmp)
{
tmp=TT[i].mrank;
ss="M";
}
if(TT[i].erank<tmp)
{
tmp=TT[i].erank;
ss="E";
}
TT[i].bestrank=tmp;
TT[i].bsetrankname=ss;
}
}
void run()
{
int i,j;
for(i=0;i<n;i++)
{
scanf("%d%d%d%d",&TT[i].id,&TT[i].ctest,&TT[i].math,&TT[i].english);
TT[i].avg=(TT[i].ctest+TT[i].math+TT[i].english)*1.0/3.0;
}
//----cmp by avg-----------
sort(TT,TT+n,cmpa);
MakeaRank();
//----cmp by ctest-----------
sort(TT,TT+n,cmpc);
MakecRank();
//----cmp by math------------
sort(TT,TT+n,cmpm);
MakemRank();
//----cmp by english------------
sort(TT,TT+n,cmpe);
MakeeRank();
//----cmp by math------------
sort(TT,TT+n,cmpa);
MakeaRank();
MakeBest();
int curid;
for(i=0;i<m;i++)
{
scanf("%d",&curid);
for(j=0;j<n;j++)
{
if(TT[j].id==curid)
{
printf("%d %s\n",TT[j].bestrank,TT[j].bsetrankname.c_str());
break;
}
}
if(j==n)
printf("N/A\n");
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF) run();
return 0;
}
给出学生3门课的成绩,求每名学生在3门课以及平均分中所能取得的最高排名。
注意:并列排名的处理上:应该是1 2 3 3 5,而不是1 2 3 3 4