1012 The Best Rank (25分)

#include<iostream>
#include<map>
#include<algorithm> 
using namespace std;
struct Student{
	string id;
	int C[2];
	int M[2];
	int E[2];
	int A[2];
}stu[3000];
bool cmp1(Student a,Student b){
	return a.C[0]>b.C[0];
}
bool cmp2(Student a,Student b){
	return a.M[0]>b.M[0];
}
bool cmp3(Student a,Student b){
	return a.E[0]>b.E[0];
}
bool cmp4(Student a,Student b){
	return a.A[0]>b.A[0];
}
int main(){
	int m,n;
	map<string, Student> mp;
	cin>>m>>n;
	for(int i=0;i<m;i++){
		cin>>stu[i].id>>stu[i].C[0]>>stu[i].M[0]>>stu[i].E[0];
		stu[i].A[0]=(stu[i].C[0]+stu[i].M[0]+stu[i].E[0])/3;
	}
	sort(stu,stu+m,cmp1);
	for(int i=0;i<m;i++){
		if(i==0){
			stu[i].C[1]=i+1;
		}else{
			if(stu[i-1].C[0]==stu[i].C[0])
				stu[i].C[1]=stu[i-1].C[1];
			else
				stu[i].C[1]=i+1;
		}
	}
	sort(stu,stu+m,cmp2);
	for(int i=0;i<m;i++){
		if(i==0){
			stu[i].M[1]=i+1;
		}else{
			if(stu[i-1].M[0]==stu[i].M[0])
				stu[i].M[1]=stu[i-1].M[1];
			else
				stu[i].M[1]=i+1;
		}
	}
	sort(stu,stu+m,cmp3);
	for(int i=0;i<m;i++){
		if(i==0){
			stu[i].E[1]=i+1;
		}else{
			if(stu[i-1].E[0]==stu[i].E[0])
				stu[i].E[1]=stu[i-1].E[1];
			else
				stu[i].E[1]=i+1;
		}
	}
	sort(stu,stu+m,cmp4);
	for(int i=0;i<m;i++){
		if(i==0){
			stu[i].A[1]=i+1;
		}else{
			if(stu[i-1].A[0]==stu[i].A[0])
				stu[i].A[1]=stu[i-1].A[1];
			else
				stu[i].A[1]=i+1;
		}
	}
	for(int i=0;i<m;i++){
		mp[stu[i].id]=stu[i];
	}
	string temp;
	string list[n];
	for(int i=0;i<n;i++){
		cin>>temp;
		list[i]=temp;
	}
	for(int i=0;i<n;i++){
		if(mp.count(list[i])==0){
			cout<<"N/A"<<endl;
		}else{
			int min=m;
			string out;
			if(mp[list[i]].A[1]<min){
				min = mp[list[i]].A[1];
				out="A";
			}
			if(mp[list[i]].C[1]<min){
				min = mp[list[i]].C[1];
				out="C";
			}
			if(mp[list[i]].M[1]<min){
				min = mp[list[i]].M[1];
				out="M";
			}
			if(mp[list[i]].E[1]<min){
				min = mp[list[i]].E[1];
				out="E";
			}
			cout<<min<<" "<<out<<endl;
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值