题目

题意:按照科目不同的优先级给给定的学生成绩排序,输出查询的学生的四种成绩排序中的最佳排名 以及科目。

tips:硬堆代码量

#include<iostream>
#include<algorithm>
using namespace std;
struct ss {
	string name;
	int C,M,E,A;
	int GA,GC,GM,GE;
};
bool cmpA(struct ss a,struct ss b) {
	return a.A>b.A;
}
bool cmpC(struct ss a,struct ss b) {
	return a.C>b.C;
}
bool cmpM(struct ss a,struct ss b) {
	return a.M>b.M;
}
bool cmpE(struct ss a,struct ss b) {
	return a.E>b.E;
}
int main() {
	int n,m;
	cin>>n>>m;
	struct ss s[n];
	for(int i=0; i<n; ++i) {
		cin>>s[i].name>>s[i].C>>s[i].M>>s[i].E;
		s[i].A=(s[i].C+s[i].E+s[i].M)/3;
	}
	sort(s,s+n,cmpA);
	s[0].GA=1;
	for(int i=1; i<n; ++i)
		if(s[i].A==s[i-1].A)
			s[i].GA=s[i-1].GA;
		else
			s[i].GA=i+1;
	sort(s,s+n,cmpC);
	s[0].GC=1;
	for(int i=1; i<n; ++i)
		if(s[i].C==s[i-1].C)
			s[i].GC=s[i-1].GC;
		else
			s[i].GC=i+1;
	sort(s,s+n,cmpM);
	s[0].GM=1;
	for(int i=1; i<n; ++i)
		if(s[i].M==s[i-1].M)
			s[i].GM=s[i-1].GM;
		else
			s[i].GM=i+1;
	sort(s,s+n,cmpE);
	s[0].GE=1;
	for(int i=1; i<n; ++i)
		if(s[i].E==s[i-1].E)
			s[i].GE=s[i-1].GE;
		else
			s[i].GE=i+1;
	for(int i=0; i<m; ++i) {
		string name;
		cin>>name;
		int j;
		for(j=0; j<n; ++j)
			if(s[j].name==name) {
				int t=min(s[j].GA,min(s[j].GC,min(s[j].GE,s[j].GM)));
				cout<<t<<" ";
				t==s[j].GA?cout<<"A\n":t==s[j].GC?cout<<"C\n":t==s[j].GM?cout<<"M\n":cout<<"E\n";
				break;
			}
		if(j==n)
			cout<<"N/A\n";
	}
	return 0;
}