大晚上寫的,代碼有點亂。
題目是處理數據的,不難。
一開始前兩個樣例沒A,是我想錯了。
我以爲是看每個學生最好的那一科排第幾,應該是:看這個學生哪一個科排名最高。
int gra[2005][5],n;
char g[] = {'C','M','E','A'};
int find_stu(int i){
int t;
bool nothave = true;
for(int j=0;j<n;j++){
if(gra[j][0] == i){
t = j;
nothave = false;
break;
}
}
if(nothave) return -1;
return t;
}
int get_rank(int t,int i){
int grade = gra[t][i];
int rankk = 1;
for(int j=0;j<n;j++){
if(gra[j][i]>grade) rankk++;
}
return rankk;
}
int main(){
int x,m,i=0,rankkk[4];
scanf("%d %d",&n,&m);
int nn = n;
while(nn--){
scanf("%d %d %d %d",&gra[i][0],&gra[i][1],&gra[i][2],&gra[i][3]);
gra[i][4] = round((double(gra[i][1]+gra[i][2]+gra[i][3]))/3);
i++;
}
while(m--){
scanf("%d",&x);
int t = find_stu(x);//找到學生索引
if(t == -1) {
printf("N/A");
if(m!=0) printf("\n");
continue;
}
rankkk[0] = get_rank(t,1);
rankkk[1] = get_rank(t,2);
rankkk[2] = get_rank(t,3);
rankkk[3] = get_rank(t,4);
int maxrank = rankkk[0];
int sub = 0;
for(int i=0;i<3;i++){
if(rankkk[i]<maxrank){
maxrank = rankkk[i];
sub = i;
}
}
if(rankkk[3]<=maxrank){
maxrank = rankkk[3];
sub = 3;
}
printf("%d %c",maxrank,g[sub]);
if(m!=0) printf("\n");
}
return 0;
}