参考:http://blog.csdn.net/lv_zj/article/details/15809007
#include<iostream>
#include<string.h>
using namespace std;
class CA
{
public:
enum{MAX=2000};
void run();
void findbest(char ID[7]);
void findrank(int a[4]);
void sort();
private:
int n,m;
int rank;
struct member
{
char StuID[7];
int CO;
int MA;
int EN;
int AV;
int ra[4];
};
member stu[MAX];
char subject;
struct aa
{
char aaa[7];
};
aa bb[MAX];
};
void CA::sort()
{
int i,j;
int tmp=-1;
for(i=0;i<n;i++)
{
stu[i].ra[0]=1;
for(j=0;j<n;j++)
{
if(stu[j].CO>stu[i].CO)
stu[i].ra[0]++;
}
}
for(i=0;i<n;i++)
{
stu[i].ra[1]=1;
for(j=0;j<n;j++)
{
if(stu[j].MA>stu[i].MA)
stu[i].ra[1]++;
}
}
for(i=0;i<n;i++)
{
stu[i].ra[2]=1;
for(j=0;j<n;j++)
{
if(stu[j].EN>stu[i].EN)
stu[i].ra[2]++;
}
}
for(i=0;i<n;i++)
{
stu[i].ra[3]=1;
for(j=0;j<n;j++)
{
if(stu[j].AV>stu[i].AV)
stu[i].ra[3]++;
}
}
/*for(i=1;i<n;i++)
{
for(j=i-1;j>=0;j--)
{
if(stu[j].MA<stu[j+1].MA)
{
tmp=stu[j].ra[1];
stu[j].ra[1]=stu[j+1].ra[1];
stu[j+1].ra[1]=tmp;
}
if(stu[j].MA==stu[j+1].MA)
{
stu[j+1].ra[1]=stu[j].ra[1];
}
}
}
for(i=1;i<n;i++)
{
for(j=i-1;j>=0;j--)
{
if(stu[j].EN<stu[j+1].EN)
{
tmp=stu[j].ra[2];
stu[j].ra[2]=stu[j+1].ra[2];
stu[j+1].ra[2]=tmp;
}
if(stu[j].EN==stu[j+1].EN)
{
stu[j+1].ra[2]=stu[j].ra[2];
}
}
}
for(i=1;i<n;i++)
{
for(j=i-1;j>=0;j--)
{
if(stu[j].AV<stu[j+1].AV)
{
tmp=stu[j].ra[3];
stu[j].ra[3]=stu[j+1].ra[3];
stu[j+1].ra[3]=tmp;
}
if(stu[j].AV==stu[j+1].AV)
{
stu[j+1].ra[3]=stu[j].ra[3];
}
}
}*/
}
void CA::findrank(int a[4])
{
rank=a[3];
subject='A';
if(a[0]<rank)
{
rank=a[0];
subject='C';
}
if(a[1]<rank)
{
rank=a[1];
subject='M';
}
if(a[2]<rank)
{
rank=a[2];
subject='E';
}
}
void CA::findbest(char ID[7])
{
rank=-1;
int i;
for(i=0;i<n;i++)
{
if(strcmp(stu[i].StuID,ID)==0)
{
findrank(stu[i].ra);
switch(subject)
{
case 'A':printf("%d ",stu[i].ra[3]);break;
case 'C':printf("%d ",stu[i].ra[0]);break;
case 'M':printf("%d ",stu[i].ra[1]);break;
case 'E':printf("%d ",stu[i].ra[2]);break;
}
printf("%c\n",subject);
break;
}
}
if(rank==-1)
printf("N/A\n");
}
void CA::run()
{
cin>>n>>m;
int i;
for(i=0;i<n;i++)
{
cin>>stu[i].StuID>>stu[i].CO>>stu[i].MA>>stu[i].EN;
stu[i].AV=(stu[i].CO+stu[i].MA+stu[i].EN)/3;
}
sort();
for(i=0;i<m;i++)
{
cin>>bb[i].aaa;
}
for(i=0;i<m;i++)
{
findbest(bb[i].aaa);
}
}
int main()
{
CA *a=new CA;
a->run();
return 0;
}