pat甲级打卡-1012 The Best Rank
这题有点复杂,参考了柳神的代码
要搞清楚这里面的结构体
#include<bits/stdc++.h>
using namespace std;
struct Stu{
int id,best;//best是最好排名的学科index
int score[4],rank[4];
}stus[2010];
int n,m,flag=-1;
int exist[1000000];
bool cmp(Stu a,Stu b){
return a.score[flag] > b.score[flag];
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
scanf("%d %d %d %d", &stus[i].id, &stus[i].score[1], &stus[i].score[2], &stus[i].score[3]);
stus[i].score[0]=(stus[i].score[1]+stus[i].score[2]+stus[i].score[3]) / 3.0 +0.5; //4舍5入
}
for(flag = 0; flag <= 3; flag++) {
sort(stus, stus + n, cmp);
stus[0].rank[flag] = 1;
for(int i = 1; i < n; i++) {
stus[i].rank[flag] = i + 1;
if(stus[i].score[flag] == stus[i-1].score[flag])
stus[i].rank[flag] = stus[i-1].rank[flag];
}
}
for(int i=0;i<n;i++){
exist[stus[i].id]=i+1;
stus[i].best=0; //最高的一项成绩排名
int minn=stus[i].rank[0];
for(int j=1;j<=3;j++){
if(stus[i].rank[j]<minn) {minn=stus[i].rank[j];stus[i].best=j;}
}
}
char c[5]={'A','C','M','E'};
for(int i=0;i<m;i++){
int id;
cin>>id;
int tmp=exist[id];
if(tmp){
int best=stus[tmp-1].best;
cout<<stus[tmp-1].rank[best]<<" "<<c[best]<<endl;
}else cout<<"N/A"<<endl;
}
return 0;
}