水题 注意并列名次的处理
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
#define maxn 2222
typedef struct stu{
char id[6];
int c;
int m;
int e;
int average;
int rank;
char rankclass;
}stu;
int main()
{
int n,md,i,j,k;
char queid[6];
stu Stu[maxn];
scanf("%d %d",&n,&md);
for(i=0;i<n;i++)
{
scanf("%s %d %d %d",Stu[i].id,&Stu[i].c,&Stu[i].m,&Stu[i].e);
Stu[i].average=(Stu[i].c+Stu[i].m+Stu[i].e)/3;
}
while(md--)
{
scanf("%s\n",queid);
for(i=0;i<n;i++)
{
if(strcmp(Stu[i].id,queid)==0)
{
int tmp;int r=1;
tmp=Stu[i].average;
for(k=0;k<n;k++)
if(Stu[k].average>tmp&&k!=i)
r++;
Stu[i].rank=r;
Stu[i].rankclass='A';
r=1;tmp=Stu[i].c;
for(k=0;k<n;k++)
if(Stu[k].c>tmp&&k!=i)
r++;
if(r<Stu[i].rank)
{Stu[i].rank=r;
Stu[i].rankclass='C';}
r=1;tmp=Stu[i].m;
for(k=0;k<n;k++)
if(Stu[k].m>tmp&&k!=i)
r++;
if(r<Stu[i].rank)
{Stu[i].rank=r;
Stu[i].rankclass='M';}
r=1;tmp=Stu[i].e;
for(k=0;k<n;k++)
if(Stu[k].e>tmp&&k!=i)
r++;
if(r<Stu[i].rank)
{Stu[i].rank=r;
Stu[i].rankclass='E';}
break;
}
}
if(i==n)
printf("N/A\n");
else
printf("%d %c\n",Stu[i].rank,Stu[i].rankclass);
// continue;
}
return 0;
}