//题意理解错误,理解成每个学生的A,C,M,E成绩中最好的。
//原题意是所有学生的某课成绩排名中最好的排名来算。
#include <stdio.h>
#include <stdlib.h>typedef struct Node{
char name[7];
int grade[3];
int avr;
int best;
}Node;
/*int getBest(int a,int b,int c,int avr){
int best=a;
if(b>best) best = b;
if(c> best) best = c;
if(avr > best) best = avr;
return best;
}*/
//n=1,2,3,4代表 C,M,E,A
void Mysort(Node *students,int n,int array[],int N){
int i = 0;
if(n<4&&n>0){
while(i<N){
array[i]=students[i].grade[n-1];
i++;
}
}else{
while(i<N){
array[i]=students[i].avr;
i++;
}
}
i=0;
int j=0;
int temp=0;
int flag = 0;
while(i<N - 1) /*外循环控制排序的总趟数*/
{
flag = 0; /*本趟排序开始前,交换标志应为假*/
j=N-1;
while(j > i) /*内循环控制一趟排序的进行*/
{
if(array[j] < array[j-1] ) /*相邻元素进行比较,若逆序就交换*/
{
temp =array[j];
array[j] = array[j-1];
array[j-1] = temp;
flag = 1; /*发生了交换,故将交换标志置为真*/
}
j--;
}
if (flag == 0) /*本趟排序未发生交换,提前终止算法*/
break;
/*
printf("第%d趟排序结果: \n",i+1);
PrintArray(array,n);
*/
i++;
}
}
int isequ(int a,int b,int c,int avr){
if(a ==b){
return 1;
}if(a==c){
return 1;
}if(a==avr){
return 1;
}if(b==c){
return 1;
}if(b==avr){
return 1;
}if(c==avr){
return 1;
}
return 0;
}
int main()
{
int N,M;
scanf("%d%d",&N,&M);
Node *students = (struct Node*)malloc(N*sizeof(Node));
Node *stupar = (struct Node*)malloc(M*sizeof(Node));
int i=0;
while(i<N){
scanf("%s%d%d%d",students[i].name,&students[i].grade[0],&students[i].grade[1],&students[i].grade[2]);
students[i].avr = (int)((float)(students[i].grade[0]+students[i].grade[1]+students[i].grade[2])/3+0.5);
// students[i].best = getBest(students[i].grade[0],students[i].grade[1],students[i].grade[2],students[i].avr);
i++;
}
int j=0;
while(j<M){
scanf("%s",stupar[j].name);
j++;
}
j=0;
int k,m;//
char flag;
while(j<M){
i=0;
while(i<N){
if(strcmp(stupar[j].name,students[i].name)==0)
break;
i++;
}
if(i==N){
printf("%s\n","N/A");
}else{
int A[N],C[N],M[N],E[N];
Mysort(students,4,A,N);
k=N-1;
while(k>=0){
if(students[i].avr==A[k]){
m = N-k;
flag='A';
break;
}
k--;
}
Mysort(students,1,C,N);
k=N-1;
while(k>=0){
if(students[i].grade[0]==C[k]){
if(m>N-k){
m = N-k;
flag='C';
}
break;
}
k--;
}
Mysort(students,2,M,N);
k=N-1;
while(k>=0){
if(students[i].grade[1]==M[k]){
if(m>N-k){
m = N-k;
flag='M';
}
break;
}
k--;
}
Mysort(students,3,E,N);
k=N-1;
while(k>=0){
if(students[i].grade[2]==E[k]){
if(m>N-k){
m = N-k;
flag='E';
}
break;
}
k--;
}
printf("%d %c\n",m,flag);
//判断有几个最大,avr拍第几,最好的在第n位
/* k=2;m=0;n=0;
while(k>=0){
if(students[i].best==students[i].grade[k]){
n=k;
}
if(students[i].avr>=students[i].grade[k])
m++;//m拍在4-m
k--;
}
if(students[i].best==students[i].avr){
n=3;
}
if(isequ(students[i].grade[0],students[i].grade[1],students[i].grade[2],students[i].avr)==1){
printf("%d %c\n",4-m,'A');
}
else if(n==0){
printf("%d %c\n",1,'C');
}else if(n==1){
printf("%d %c\n",1,'M');
}
else if(n==2){
printf("%d %c\n",1,'E');
}else if(n==3){
printf("%d %c\n",1,'A');
}*/
}
j++;
}
return 0;
}