1075 PAT Judge (25 分)难度: 一般 / 知识点: 多关键字排序

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1075 PAT Judge (25 分)难度: 一般 / 知识点: 多关键字排序相关的知识,希望对你有一定的参考价值。


https://pintia.cn/problem-sets/994805342720868352/problems/994805393241260032
就是排序,注意一些细节即可。

#include<bits/stdc++.h>
using namespace std;
struct node 
{
    string name;
    int s[10],cnt;
    int sum=0;
}temp;
unordered_map<string,node>mp;
unordered_map<string,int>hush;
vector<node>ve;
int a[10],n,k,m;
bool cmp(node a,node b)
{
    if(a.sum==b.sum)
    {
        if(a.cnt==b.cnt)
               return a.name<b.name;
        return a.cnt>b.cnt;
    }
    return a.sum>b.sum;
}
int main(void)
{
    scanf("%d%d%d",&n,&k,&m);
    for(int i=0;i<k;i++) scanf("%d",&a[i]);
    for(int i=0;i<m;i++)
    {
        string name;
        int id,score;
        cin>>name;
        scanf("%d%d",&id,&score);
        if(!hush[name])//这个学号没见过
        {
            for(int j=0;j<k;j++) mp[name].s[j]=-2;//先将每门置为-2,意为还没提交过
            mp[name].s[id-1]=score;
            hush[name]=1;
        }else mp[name].s[id-1]=max({score,mp[name].s[id-1]});
    }
    for(auto i=mp.begin();i!=mp.end();i++)
    {
        temp.name=i->first;
        int cnt=0;
        temp.sum=0;
        bool flag=0;
        for(int i=0;i<k;i++)
        {
            temp.s[i]=mp[temp.name].s[i];
            if(temp.s[i]==a[i]) cnt++;
            if(temp.s[i]>=0) temp.sum+=temp.s[i],flag=1;//说明有提交过题
        }
        temp.cnt=cnt;
        if(flag) ve.push_back(temp);
    }
    sort(ve.begin(),ve.end(),cmp);
    int index=1;
    for(int i=0;i<ve.size();i++) 
    {
        printf("%d",index);
        printf(" %s %d",ve[i].name.c_str(),ve[i].sum);
        for(int j=0;j<k;j++) 
        {
            if(ve[i].s[j]==-2) printf(" -");
            else if(ve[i].s[j]==-1) printf(" 0");
            else printf(" %d",ve[i].s[j]);
        }
        puts("");
        if(i+1!=ve.size()&&ve[i].sum!=ve[i+1].sum) index=i+2;
    }
    return 0;
}

以上是关于1075 PAT Judge (25 分)难度: 一般 / 知识点: 多关键字排序的主要内容,如果未能解决你的问题,请参考以下文章

PAT甲级1075 PAT Judge (25 分)

PAT (Advanced Level) 1075. PAT Judge (25)

PAT(A) 1075. PAT Judge (25)

1075. PAT Judge (25)

1075. PAT Judge (25)

PAT鐢茬骇 1075 PAT Judge (25鍒?