1012. The Best Rank (25)
最好的排名和对应类别(A是平均成绩)A > C > M > E 没有排名“N/A”
这道题并不难,就是麻烦了点。还有一点就是排名的顺序不是1,2,2,3 而是1,2,2,4
#include <cstdio>
#include<algorithm>
using namespace std;
const int N=2002;
struct student{
int C,M,E,id;
double A;
int rankC,rankM,rankE,rankA;
}stu[N];
int cmpA(student a,student b){
return a.A>b.A;
}
int cmpC(student a,student b){
return a.C>b.C;
}
int cmpM(student a,student b){
return a.M>b.M;
}
int cmpE(student a,student b){
return a.E>b.E;
}
void Query(int id,int n){
for(int i=0;i<n;i++){
if(stu[i].id==id){
if(stu[i].rankA<=stu[i].rankC&&stu[i].rankA<=stu[i].rankM&&stu[i].rankA<=stu[i].rankE)
printf("%d A\n",stu[i].rankA);
else if(stu[i].rankC<=stu[i].rankM&&stu[i].rankC<=stu[i].rankE)
printf("%d C\n",stu[i].rankC);
else if(stu[i].rankM<=stu[i].rankE)
printf("%d M\n",stu[i].rankM);
else
printf("%d E\n",stu[i].rankE);
return;
}
}
printf("N/A\n");
}
int main() {
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].C,&stu[i].M,&stu[i].E);
stu[i].A=1.0*(stu[i].C+stu[i].M+stu[i].E)/3;
}
sort(stu,stu+n,cmpA);
double pre=stu[0].A;
for(int i=0,r=1;i<n;i++){
if(stu[i].A!=pre)
r=i+1,pre=stu[i].A;
stu[i].rankA=r;
}
sort(stu,stu+n,cmpC);
for(int i=0,r=1,pre=stu[0].C;i<n;i++){
if(stu[i].C!=pre)
r=i+1,pre=stu[i].C;
stu[i].rankC=r;
}
sort(stu,stu+n,cmpM);
for(int i=0,r=1,pre=stu[0].M;i<n;i++){
if(stu[i].M!=pre)
r=i+1,pre=stu[i].M;
stu[i].rankM=r;
}
sort(stu,stu+n,cmpE);
for(int i=0,r=1,pre=stu[0].E;i<n;i++){
if(stu[i].E!=pre)
r=i+1,pre=stu[i].E;
stu[i].rankE=r;
}
int id;
while(m--){
scanf("%d",&id);
Query(id,n);
}
return 0;
}