PAT-A 1012 The Best Rank (25)

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

#define MAXN 2005

struct data{
    int grade;
    string name;
};

bool cmp(const data &a,const data &b){
    return a.grade>b.grade;
}

int findname(data a[],int n,string name){
    for(int i=0;i<n;i++){
        if(a[i].name==name){
            int j;
            for(j=i;a[j].grade==a[j-1].grade;j--);
            return j+1;
        }
    }
    return -1;
}
int main()
{
    int nn,qn;
    cin>>nn>>qn;
    data A[MAXN],C[MAXN],M[MAXN],E[MAXN];
    for(int i=0;i<nn;i++){
        string name;
        int c,m,e;
        cin>>name>>c>>m>>e;
        A[i].name=name;
        A[i].grade=c+m+e;
        C[i].name=name;
        C[i].grade=c;
        M[i].name=name;
        M[i].grade=m;
        E[i].name=name;
        E[i].grade=e;
    }
    sort(A,A+nn,cmp);
    sort(C,C+nn,cmp);
    sort(M,M+nn,cmp);
    sort(E,E+nn,cmp);
    while(qn--){
        string name;
        int res[4];
        cin>>name;
        res[0]=findname(A,nn,name);
        if(res[0]<0){
            cout<<"N/A"<<endl;
            continue;
        }
        res[1]=findname(C,nn,name);
        res[2]=findname(M,nn,name);
        res[3]=findname(E,nn,name);
        int minr=min(min(res[0],res[1]),min(res[2],res[3]));
        cout<<minr<<" ";
        if(minr==res[0]){
            cout<<'A'<<endl;
        }else if(minr==res[1]){
            cout<<'C'<<endl;
        }else if(minr==res[2]){
            cout<<'M'<<endl;
        }else if(minr==res[3]){
            cout<<'E'<<endl;
        }
    }
}

关于排序一定要考虑相等的处理

若前两者分数相同,名次应该是

1 1 3 4 5

而不是

1 2 3 4 5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值