题解
map+结构体
代码
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int temp;
struct stu
{
string id;
int c,m,e,a;
int cc,mm,ee,aa;
} per[3000];
bool compare(stu x,stu y)
{
if(temp==1)
{
return x.a>y.a;
}
else if(temp==2)
{
return x.c>y.c;
}
else if(temp==3)
{
return x.m>y.m;
}
else
{
return x.e>y.e;
}
}
int main()
{
int n,m;
string id;
map<string,int>p;
cin>>n>>m;
for(int i=0; i<n; i++)
{
cin>>per[i].id>>per[i].c>>per[i].m>>per[i].e;
per[i].a=per[i].c+per[i].m+per[i].e;
}
temp=1;
sort(per,per+n,compare);
for(int j=0; j<n; j++)
{
//成绩相同的名次也相同
if(j>0&&per[j].a==per[j-1].a)
per[j].aa=per[j-1].aa;
else
per[j].aa=j+1;
}
temp=2;
sort(per,per+n,compare);
for(int j=0; j<n; j++)
{
if(j>0&&per[j].c==per[j-1].c)
per[j].cc=per[j-1].cc;
else
per[j].cc=j+1;
}
temp=3;
sort(per,per+n,compare);
for(int j=0; j<n; j++)
{
if(j>0&&per[j].m==per[j-1].m)
per[j].mm=per[j-1].mm;
else
per[j].mm=j+1;
}
temp=4;
sort(per,per+n,compare);
for(int j=0; j<n; j++)
{
if(j>0&&per[j].e==per[j-1].e)
per[j].ee=per[j-1].ee;
else
per[j].ee=j+1;
p[per[j].id]=j+1;
}
for(int i=0;i<m;i++){
cin>>id;
if(p[id]){
char res='A';
int b=per[p[id]-1].aa;
if(b>per[p[id]-1].cc){
b=per[p[id]-1].cc,res='C';
}if(b>per[p[id]-1].mm){
b=per[p[id]-1].mm,res='M';
}if(b>per[p[id]-1].ee){
b=per[p[id]-1].ee,res='E';
}
cout<<b<<" "<<res<<endl;
}else{
cout<<"N/A"<<endl;
}
}
return 0;
}