#include<bits/stdc++.h>
using namespace std;
typedef struct ss {
int Id,C,M,E,A,T,num;
char c;
} ss;
vector<ss> A(1000000),a(2010);
bool cmpA(ss a,ss b) {//按平均值比较
return a.A>b.A;
}
bool cmpC(ss a,ss b) {//按C语言比较
return a.C>b.C;
}
bool cmpM(ss a,ss b) {//按数学比较
return a.M>b.M;
}
bool cmpE(ss a,ss b) {//按英语比较
return a.E>b.E;
}
int main() {
int n,m;
cin>>n>>m;
for(int i=0; i<1000000; i++)//初始化数组A
A[i].T=0;
for(int i=0; i<n; i++) {
cin>>a[i].Id>>a[i].C>>a[i].M>>a[i].E;
a[i].A=(a[i].C+a[i].M+a[i].E)/3;
a[i].T=1;
a[i].num=3000;
}
sort(a.begin(),a.begin()+n,cmpA);
for(int i=0; i<n; i++) {//按照平均值排名
int j=i+1;
if(j<a[i].num) {
a[i].num=j;
a[i].c='A';
}
while(i+1<n&&a[i+1].A==a[i].A) {
i++;
if(j<a[i].num) {
a[i].num=j;
a[i].c='A';
}
}
if(i+1!=j)
i--;
}
sort(a.begin(),a.begin()+n,cmpC);
for(int i=0; i<n; i++) {//按照C语言排名
int j=i+1;
if(j<a[i].num) {
a[i].num=j;
a[i].c='C';
}
while(i+1<n&&a[i+1].C==a[i].C) {
i++;
if(j<a[i].num) {
a[i].num=j;
a[i].c='C';
}
}
if(i+1!=j)
i--;
}
sort(a.begin(),a.begin()+n,cmpM);
for(int i=0; i<n; i++) {//按照数学排名
int j=i+1;
if(j<a[i].num) {
a[i].num=j;
a[i].c='M';
}
while(i+1<n&&a[i+1].M==a[i].M) {
i++;
if(j<a[i].num) {
a[i].num=j;
a[i].c='M';
}
}
if(i+1!=j)
i--;
}
sort(a.begin(),a.begin()+n,cmpE);
for(int i=0; i<n; i++) {//按照英语排名
int j=i+1;
if(j<a[i].num) {
a[i].num=j;
a[i].c='E';
}
while(i+1<n&&a[i+1].E==a[i].E) {
i++;
if(j<a[i].num) {
a[i].num=j;
a[i].c='E';
}
}
if(i+1!=j)
i--;
}
for(int i=0;i<n;i++)//把数据存放在数组A中,提高查找速度
A[a[i].Id]=a[i];
for(int i=0;i<m;i++){
int id;
cin>>id;
if(A[id].T)
cout<<A[id].num<<" "<<A[id].c<<endl;
else
cout<<"N/A"<<endl;
}
return 0;
}
1012 The Best Rank
最新推荐文章于 2022-02-20 18:49:14 发布