方法:用sort排序
注意点:1,成绩相等时的排名处理;2,科目的优先级处理
#include <iostream>
#include <algorithm>
using namespace std;
struct student{
int rank[4];
float score[4];
int id;
};
const int maxn=1000010;
bool hasha[maxn]={0};
student stu[maxn];
int N,M; //学生数,查询数
int order=0;
bool cmp(student a,student b){
return a.score[order]>b.score[order];
}
void getrank(){
stu[0].rank[order]=1;
for(int i=1;i<N;i++){
if(stu[i].score[order]==stu[i-1].score[order]){
stu[i].rank[order]=stu[i-1].rank[order];
}else{
stu[i].rank[order]=i+1;
}
}
}
char lesson[]={'C','M','E','A'};
void search(int id){
for(int i=0;i<N;i++){
if(id==stu[i].id){
int high=stu[i].rank[3],highpos=3;
for(int j=0;j<3;j++){
if(stu[i].rank[j]<high){
high=stu[i].rank[j];
highpos=j;
}
}
printf("%d %c\n",high,lesson[highpos]);
return;
}
}
}
int main(){
scanf("%d%d",&N,&M);
for(int i=0;i<N;i++){
scanf("%d%f%f%f",&stu[i].id,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
hasha[stu[i].id]=true;
stu[i].score[3]=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
}
for(int i=0;i<4;i++){
sort(stu,stu+N,cmp);
getrank();
order++;
}
for(int i=0;i<M;i++){
int tid;
scanf("%d",&tid);
if(hasha[tid]==false){
printf("N/A\n");
}else{
search(tid);
}
}
return 0;
}