使用结构体存储,使用4次排序,分别记录每一科的排名;
使用哈希映射,在最后一次排序时记录ID所对应的位次。
//
// main.cpp
// PATA1012
//
// Created by Phoenix on 2018/1/31.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 2010;
int flag[1000000] = {0};
char c[4] = {'A', 'C', 'M', 'E'};
struct Student {
int id;
int mark[4];
int rank[4];
}stu[maxn];
bool cmp0(Student a, Student b) {
return a.mark[0] > b.mark[0];
}
bool cmp1(Student a, Student b) {
return a.mark[1] > b.mark[1];
}
bool cmp2(Student a, Student b) {
return a.mark[2] > b.mark[2];
}
bool cmp3(Student a, Student b) {
return a.mark[3] > b.mark[3];
}
void print(int id){
if(flag[id] == 0) printf("N/A\n");
else{
int k;
int MIN = maxn;
for(int i = 0; i <= 3; i++) {
//printf("%d ",stu[flag[id] - 1].mark[i]);
if(stu[flag[id] - 1].rank[i] < MIN) {
MIN = stu[flag[id] - 1].rank[i];
k = i;
}
}
printf("%d %c\n", MIN, c[k]);
}
}
int main(int argc, const char * argv[]) {
int n, m;
scanf("%d %d", &n, &m);
for(int i = 0; i < n; i++) {
scanf("%d %d %d %d", &stu[i].id, &stu[i].mark[1], &stu[i].mark[2], &stu[i].mark[3]);
stu[i].mark[0] = (stu[i].mark[1] + stu[i].mark[2] + stu[i].mark[3]);
}
int rank;
sort(stu, stu + n, cmp0);
rank = 1;
stu[0].rank[0] = rank;
for(int i = 1; i < n; i++) {
if(stu[i].mark[0] == stu[i - 1].mark[0]){
stu[i].rank[0] = rank;
}else {
rank = i + 1;
stu[i].rank[0] = rank;
}
}
sort(stu, stu + n, cmp1);
rank = 1;
stu[0].rank[1] = rank;
for(int i = 1; i < n; i++) {
if(stu[i].mark[1] == stu[i - 1].mark[1]){
stu[i].rank[1] = rank;
}else {
rank = i + 1;
stu[i].rank[1] = rank;
}
}
sort(stu, stu + n, cmp2);
rank = 1;
stu[0].rank[2] = rank;
for(int i = 1; i < n; i++) {
if(stu[i].mark[2] == stu[i - 1].mark[2]){
stu[i].rank[2] = rank;
}else {
rank = i + 1;
stu[i].rank[2] = rank;
}
}
sort(stu, stu + n, cmp3);
rank = 1;
stu[0].rank[3] = rank;
flag[stu[0].id] = 1;
for(int i = 1; i < n; i++) {
if(stu[i].mark[3] == stu[i - 1].mark[3]){
stu[i].rank[3] = rank;
}else {
rank = i + 1;
stu[i].rank[3] = rank;
}
flag[stu[i].id] = i + 1;
}
for(int i = 0; i < m; i++) {
int id;
scanf("%d", &id);
print(id);
}
return 0;
}