lpirate 1012. The Best Rank (25) 排名并列的问题

简介: //题意:按 平均成绩 c语言 数学 英语 中排名最高的排名输出 并输出是哪门课的排名 如果没有该id 输出 N/A//思路:用结构题存储 a, c, m, e; ra, rc, rm, re; 用ma记录是否存在//注...
//题意:按 平均成绩 c语言 数学 英语 中排名最高的排名输出 并输出是哪门课的排名 如果没有该id 输出 N/A
//思路:用结构题存储 a, c, m, e; ra, rc, rm, re; 用ma记录是否存在
//注意存在排名并列的问题
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

struct node {
    string id;
    int a, c, m, e;
    int ra, rc, rm, re;
};
bool cmpa(node &a, node &b){return a.a > b.a;}
bool cmpc(node &a, node &b){return a.c > b.c;}
bool cmpm(node &a, node &b){return a.m > b.m;}
bool cmpe(node &a, node &b){return a.e > b.e;}

vector<node> v;
map<string, int> ma;
int main(){
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        node t;
        cin >> t.id >> t.c >> t.m >> t.e;
        t.a = (t.c + t.m + t.e) / 3;
        v.push_back(t);
    }
    sort(v.begin(), v.end(), cmpa);
    v[0].ra = 1;
    for (int i = 1; i < v.size(); i++){
        if(v[i-1].a == v[i].a) v[i].ra = v[i-1].ra;
        else v[i].ra = i + 1;
    }
    sort(v.begin(), v.end(), cmpc);
    v[0].rc = 1;
    for (int i = 1; i < v.size(); i++){
        if(v[i-1].c == v[i].c) v[i].rc = v[i-1].rc;
        else v[i].rc = i + 1;
    }
    sort(v.begin(), v.end(), cmpm);
    v[0].rm = 1;
    for (int i = 1; i < v.size(); i++){
        if(v[i-1].m == v[i].m) v[i].rm = v[i-1].rm;
        else v[i].rm = i + 1;
    }
    sort(v.begin(), v.end(), cmpe);
    v[0].re = 1; ma[v[0].id] = 1;
    for (int i = 1; i < v.size(); i++){
        if(v[i-1].e == v[i].e) v[i].re = v[i-1].re;
        else v[i].re = i + 1;
        ma[v[i].id] = i + 1;
    }

    for (int j = 0; j < m; j++) {
        string t;
        cin >> t;
        if(ma[t]){
            int i = ma[t] - 1;
            if(v[i].ra <= v[i].rc && v[i].ra <= v[i].rm && v[i].ra <= v[i].re)
                cout << v[i].ra << ' ' << 'A' << endl;
            else if(v[i].rc < v[i].ra && v[i].rc <= v[i].rm && v[i].rc <= v[i].re)
                cout << v[i].rc << ' ' << 'C' << endl;
            else if(v[i].rm < v[i].ra && v[i].rm < v[i].rc && v[i].rm <= v[i].re)
                cout << v[i].rm << ' ' << 'M' << endl;
            else if(v[i].re < v[i].ra && v[i].re < v[i].rc && v[i].re < v[i].rm)
                cout << v[i].re << ' ' << 'E' << endl;
        }else{
            cout << "N/A\n";
        }
    }

    return 0;
}


目录
相关文章
|
7月前
|
Python
DataFrame排序和排名案例解析
本文演示了如何使用pandas对DataFrame进行排序和排名。首先,通过`pd.DataFrame()`将字典转换为DataFrame,然后利用`sort_values()`按&#39;年龄&#39;列进行升序排序。此外,还使用`rank()`方法为&#39;年龄&#39;列生成排名,并将其添加到DataFrame中作为新的&#39;年龄排名&#39;列。
106 0
|
6月前
|
SQL 大数据 数据挖掘
深入解析力扣178题:分数排名(DENSE_RANK详解及模拟面试问答)
深入解析力扣178题:分数排名(DENSE_RANK详解及模拟面试问答)
成绩排序 给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。
成绩排序 给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。
652 0
|
算法 Python
一日一技:Python实现有序列表并列排名
一日一技:Python实现有序列表并列排名
165 0
|
机器学习/深度学习 人工智能 BI
【CCCC】L3-015 球队“食物链” (30分),搜索排列
【CCCC】L3-015 球队“食物链” (30分),搜索排列
125 0
|
测试技术
1004 成绩排名 (20 分)(sort)
1004 成绩排名 (20 分)(sort)
123 0
|
测试技术
L2-003 月饼 (25 分)(sort根据关键字排序)
L2-003 月饼 (25 分)(sort根据关键字排序)
92 0
L2-009 抢红包 (25 分)(sort多关键字排序)
L2-009 抢红包 (25 分)(sort多关键字排序)
83 0
L2-021 点赞狂魔 (25 分)(sort多关键字排序)
L2-021 点赞狂魔 (25 分)(sort多关键字排序)
91 0