水。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
using namespace std;
#define MAX 2000+10
struct Student
{
char id[8];
int grade[4];
int srank[4];
} student[MAX];
int now;
char subject[4] = {'A', 'C', 'M', 'E'};
int cmp(const void *a, const void *b)
{
return (*(Student*)b).grade[now] - (*(Student*)a).grade[now];
}
int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int N = 0, M = 0;
cin >> N >> M;
for (int i = 0; i < N; i++)
{
cin >> student[i].id >> student[i].grade[1] >> student[i].grade[2] >> student[i].grade[3];
student[i].grade[0] = student[i].grade[1]+student[i].grade[2]+student[i].grade[3];
}
//sort
for (int i = 0; i < 4; i++)
{
now = i;
qsort(student, N, sizeof(student[0]), cmp);
student[0].srank[now] = 1;
for (int j = 1; j < N; j++)
{
if (student[j].grade[now] == student[j-1].grade[now])
student[j].srank[now] = student[j-1].srank[now];
else
student[j].srank[now] = j+1;
}
}
char tempid[8];
for (int i = 0; i < M; i++)
{
int max_rank = MAX;
char max_sub;
cin >> tempid;
for (int j = 0; j < N; j++)
if (!strcmp(tempid, student[j].id))
{
for (int k = 0; k < 4; k++)
{
if (student[j].srank[k] < max_rank)
{
max_rank = student[j].srank[k];
max_sub = subject[k];
}
}
}
if (max_rank != MAX)
cout << max_rank << " " << max_sub << endl;
else
cout << "N/A" << endl;
}
return 0;
}