题意:按照科目不同的优先级给给定的学生成绩排序,输出查询的学生的四种成绩排序中的最佳排名 以及科目。
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;
}