思路:
- 将数据存入数组;
- 按条件排序赋值排名即可;
AC CODE:
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 2020;
struct PER{
double grade[4];
int rank[4];
int id;
}person[maxn];
int n,m,type;
bool cmp(PER a,PER b){
return a.grade[type]>b.grade[type];
}
void check(int index){
bool flag = false;
for(int i=0;i<n;i++){
if(person[i].id==index){
flag = true;
int v,min_rank=0x3fffff;
for(int j=0;j<4;j++){
if(min_rank>person[i].rank[j]){
min_rank = person[i].rank[j];
v = j;
}
}
printf("%d ",min_rank);
if(v==0) cout << "A\n";
else if(v==1) cout << "C\n";
else if(v==2) cout << "M\n";
else if(v==3) cout << "E\n";
break;
}
}
if(!flag) cout << "N/A\n";
}
int main() {
cin >> n >> m;
for(int i=0;i<n;i++){
scanf("%d",&person[i].id);
double sum=0;
for(int j=1;j<=3;j++){
scanf("%lf",&person[i].grade[j]);
sum += person[i].grade[j];
}
person[i].grade[0] = sum/3;
}
for(int i=0;i<4;i++){
type = i;
sort(person,person+n,cmp);
for(int j=0;j<n;j++){
if(j>0 && person[j].grade[i]==person[j-1].grade[i]) person[j].rank[i] = person[j-1].rank[i];
else person[j].rank[i] = j+1;
}
}
for(int i=0;i<m;i++){
int id;
scanf("%d",&id);
check(id);
}
return 0;
}