美文网首页
PAT甲级 1025 PAT Ranking

PAT甲级 1025 PAT Ranking

作者: Rick97 | 来源:发表于2018-10-24 10:34 被阅读0次

原题链接1025 PAT Ranking

题目大意 给定N个考点的学生注册号码和成绩,合并所有考点的数据并排序。

注意 当两个学生的成绩相等时,他们的排名也必须是一样的,并且在排序的时候也要按他们的注册号码排序。

--实现比较器时,比较大小要用“>",不要用">=",否则最后一个测试点会报运行错误

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
struct node{
    string renum;
    int lnum, lrank, grade;
};
bool cmp(node n1, node n2){
    if(n1.grade>n2.grade)
        return true;
    else if(n1.grade==n2.grade){
        return n1.renum<n2.renum;
    }
    else
        return false;
}
vector<node> loc, final;
int main(){
    int n, k, fsize=0;
    scanf("%d\n", &n);
    for(int i=0;i<n;i++){
        scanf("%d\n", &k);
        loc.resize(k);
        final.resize(k+fsize);
        fsize = final.size();
        for(int j=0;j<k;j++){
            cin>>loc[j].renum;
            scanf("%d\n", &loc[j].grade);
        }
        sort(loc.begin(), loc.end(), cmp);
        int lr = 1;
        for(int j=0;j<k;j++){
            if(j!=0&&loc[j].grade!=loc[j-1].grade)  lr=j+1;
            final[fsize-k+j].renum = loc[j].renum;
            final[fsize-k+j].grade = loc[j].grade;
            final[fsize-k+j].lrank = lr;
            final[fsize-k+j].lnum = i+1;
        }
        loc.clear();
    }
    sort(final.begin(), final.end(), cmp);
    printf("%d\n", final.size());
    int frank=1;
    for(int i=0;i<final.size();i++){
        if(i!=0&&final[i].grade!=final[i-1].grade)  frank = i+1;
        cout<<final[i].renum;
        printf(" %d %d %d\n", frank, final[i].lnum, final[i].lrank);
    }
    return 0;
}

相关文章

网友评论

      本文标题:PAT甲级 1025 PAT Ranking

      本文链接:https://www.haomeiwen.com/subject/kljttqtx.html