PAT甲题题解-1012. The Best Rank (25)-排序水题

Posted 辰曦~文若

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT甲题题解-1012. The Best Rank (25)-排序水题相关的知识,希望对你有一定的参考价值。

排序,水题
因为最后如果一个学生最好的排名有一样的,输出的课程有个优先级A>C>M>E
那么按这个优先级顺序进行排序
每次排序前先求当前课程的排名
然后再与目前最好的排名比较、更新

至于查询,建立id与索引的映射即可。

技术分享
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
const int maxn=2000+5;
int n,m;
map<string,int> maps;
struct Stu{
    char id[10];
    int score[4];
    int ranks;
    int best_rank=5000;
    int c;
}stu[maxn];

bool cmp1(Stu a,Stu b){
    return a.score[0]>b.score[0];
}
bool cmp2(Stu a,Stu b){
    return a.score[1]>b.score[1];
}
bool cmp3(Stu a,Stu b){
    return a.score[2]>b.score[2];
}
bool cmp4(Stu a,Stu b){
    return a.score[3]>b.score[3];
}

void solveRanks(int k){
    stu[0].ranks=1;
    if(stu[0].ranks<stu[0].best_rank){
        stu[0].best_rank=stu[0].ranks;
        stu[0].c=k;
    }
    for(int i=1;i<n;i++){
        if(stu[i].score[k]==stu[i-1].score[k]){
            stu[i].ranks=stu[i-1].ranks;
        }
        else{
            stu[i].ranks=i+1;
        }
        if(stu[i].ranks<stu[i].best_rank){
            stu[i].best_rank=stu[i].ranks;
            stu[i].c=k;
        }
    }
}
int main()
{
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++){
        scanf("%s %d %d %d",stu[i].id,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
        stu[i].score[3]=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
    }
    sort(stu,stu+n,cmp4);
    solveRanks(3);

    sort(stu,stu+n,cmp1);
    solveRanks(0);

    sort(stu,stu+n,cmp2);
    solveRanks(1);

    sort(stu,stu+n,cmp3);
    solveRanks(2);

    string str;
    for(int i=0;i<n;i++){
        str=stu[i].id;
        maps[str]=i+1;
    }
    char course[4]={C,M,E,A};
    for(int i=0;i<m;i++){
        cin>>str;
        int idx=maps[str]-1;
        if(idx==-1)
            printf("N/A\n");
        else
            printf("%d %c\n",stu[idx].best_rank,course[stu[idx].c]);
    }
    return 0;
}
View Code

 





以上是关于PAT甲题题解-1012. The Best Rank (25)-排序水题的主要内容,如果未能解决你的问题,请参考以下文章

PAT——甲级1012:The Best Rank

pat 1012 The Best Rank

PAT A1012 The Best Rank

PAT(A) 1012. The Best Rank (25)

PAT Advanced 1012 The Best Rank (25分)

PAT 1012 The Best Rank