ZJU PAT 1012
#include <stdio.h>
#include <string.h>
#define MAX_NUM 0x7fffffff
typedef struct Stu{
char ID[10];
double score[4];
int best_rank;
int best_course;
}Stu;
Stu stu[1000000];
int N,M;
char map[]={'C','M','E','A'};
int main()
{
int i;
scanf("%d%d",&N,&M);
for(i=0;i<N;i++){
scanf("%s%lf%lf%lf",&stu[i].ID,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
stu[i].score[3]=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
}
int rank[4]={1,1,1,1};
for(i=0;i<N;i++){
int rank[4]={1,1,1,1};
int j,k;
for(j=0;j<N;j++){
for(k=0;k<4;k++){
if(i!=j&&stu[j].score[k]>stu[i].score[k])
rank[k]++;
}
}
int best_rank=MAX_NUM;
int best_course=MAX_NUM;
for(j=0;j<4;j++){
if(rank[j]<best_rank){
best_rank=rank[j];
best_course=j;
}
else if(rank[j]==best_rank){
if(j==3||j<best_course){
best_course=j;
}
}
}
stu[i].best_rank=best_rank;
stu[i].best_course=best_course;
}
for(i=0;i<M;i++){
char search[10];
scanf("%s",&search);
int j=0;
for(;j<N;j++){
if(strcmp(stu[j].ID,search)==0){
printf("%d %c\n",stu[j].best_rank,map[stu[j].best_course]);
break;
}
}
if(j==N)
printf("N/A\n");
}
}