PAT1012 The Best Rank

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;  
}  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值