浙大PAT (Advanced Level) Practise 1012 The Best Rank (25)
来源:互联网 发布:最美天气网数据来源 编辑:程序博客网 时间:2024/05/17 23:01
#include <iostream> //参考了人家的解法#include <vector>#include <algorithm>#include <map>using namespace std;struct Stu{int id;int C;int M;int E;int A;};bool sortByC(Stu a,Stu b){ return a.C>b.C;}bool sortByM(Stu a,Stu b){ return a.M>b.M;}bool sortByE(Stu a,Stu b){ return a.E>b.E;}bool sortByA(Stu a,Stu b){return a.A>b.A;}int main(){freopen("PAT1012.txt","r",stdin);int N,M,Q;vector<Stu> v;map<int,char> myType;map<int,int> myRank;cin>>N>>M; Stu S;for(int i=0;i<N;++i) //读入所有学生资料{cin>>S.id>>S.C>>S.M>>S.E;S.A=(S.C+S.M+S.E)/3;v.push_back(S);}int score=-1;int rank=0;sort(v.begin(),v.end(),sortByA);for(int i=0;i<v.size();++i) //先考察学生A成绩的排名{if(v[i].A!=score){rank=i+1; //更新排名}score=v[i].A;myRank[v[i].id]=rank; //给每个学生按A成绩排名myType[v[i].id]='A'; //说明排名类型是A}score=-1;rank=0;sort(v.begin(),v.end(),sortByC);for(int i=0;i<v.size();++i) //然后考察学生C成绩的排名{if(v[i].C!=score){rank=i+1; //更新排名}score=v[i].C;if(rank<myRank[v[i].id]) //如果当前排名方式较前一种排名方式考前,那么更新排名{ myRank[v[i].id]=rank; //给每个学生按新的方式排名 myType[v[i].id]='C'; //说明排名类型}}score=-1;rank=0;sort(v.begin(),v.end(),sortByM);for(int i=0;i<v.size();++i) //然后考察学生M成绩的排名{if(v[i].M!=score){rank=i+1; //更新排名}score=v[i].M;if(rank<myRank[v[i].id]) //如果当前排名方式较前一种排名方式考前,那么更新排名{ myRank[v[i].id]=rank; //给每个学生按新的方式排名 myType[v[i].id]='M'; //说明排名类型}}score=-1;rank=0;sort(v.begin(),v.end(),sortByE);for(int i=0;i<v.size();++i) //然后考察学生E成绩的排名{if(v[i].E!=score){rank=i+1; //更新排名}score=v[i].E;if(rank<myRank[v[i].id]) //如果当前排名方式较前一种排名方式考前,那么更新排名{ myRank[v[i].id]=rank; //给每个学生按新的方式排名 myType[v[i].id]='E'; //说明排名类型}}for(int i=0;i<M;++i) //检测每个学号的输入是否存在,存在就输出结果{cin>>Q;if(myRank.count(Q)){cout<<myRank[Q]<<' '<<myType[Q]<<endl;}elsecout<<"N/A"<<endl;}return 0;}