题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1012
// 1. 求平均成绩/3时有精度损失,造成2个测试点错误。不要被例子误导呢
// 2. 调了半小时。题目没说明相同成绩同名次呢!
// 3. 函数名要形象,不要用cmp0,cmp1...
#include <stdio.h>
#include <algorithm>
#define SIZE 3000+100
using namespace std;
struct stu
{
int id; // %06d
int c;
int m;
int e;
int sum; // 为了减小误差,用sum来保存三成绩的和
int rank;
char method;
};
int n, m;
stu s[SIZE];
bool sortByA(stu sum, stu b)
{
return sum.sum > b.sum;
}
bool sortByC(stu sum, stu b)
{
return sum.c > b.c;
}
bool sortByM(stu sum, stu b)
{
return sum.m > b.m;
}
bool sortByE(stu sum, stu b)
{
return sum.e > b.e;
}
void Output()
{
int k;
for(k=0; k<n; k++)
{
printf("id:%d sum:%d c:%d m:%d e:%d\n", s[k].id,
s[k].sum, s[k].c, s[k].m, s[k].e);
}
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
#endif
scanf("%d%d", &n, &m);
int i;
for(i=0; i<n; i++)
{
scanf("%d%d%d%d", &s[i].id, &s[i].c,
&s[i].m, &s[i].e);
s[i].sum = s[i].c +s[i].m+s[i].e;
}
int rank=0;
int score = -1;
sort(s, s+n, sortByA);
for(i=0; i<n;i++)
{
if(s[i].sum != score)
{
rank = i+1;
}
score = s[i].sum;
s[i].rank = rank;
s[i].method = 'A';
}
rank =0;
score=-1;
sort(s, s+n, sortByC);
for(i=0; i<n;i++)
{
if(s[i].c != score)
{
rank = i+1;
}
score = s[i].c;
if(s[i].rank > rank)
{
s[i].rank = rank;
s[i].method = 'C';
}
}
rank =0;
score=-1;
sort(s, s+n, sortByM);
for(i=0; i<n;i++)
{
if(s[i].m != score)
{
rank = i+1;
}
score = s[i].m;
if(s[i].rank > rank)
{
s[i].rank = rank;
s[i].method = 'M';
}
}
rank =0;
score=-1;
sort(s, s+n, sortByE);
for(i=0; i<n;i++)
{
if(s[i].e != score)
{
rank = i+1;
}
score = s[i].e;
if(s[i].rank > rank)
{
s[i].rank = rank;
s[i].method = 'E';
}
}
while(m-->0)
{
int id;
scanf("%d", &id);
for(i=0; i<n; i++)
{
if(id == s[i].id)
{
printf("%d %c\n", s[i].rank, s[i].method);
break;
}
}
if(i == n)
{
printf("N/A\n");
continue;
}//no this id
}
return 0;
}