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

原创粉丝点击