【PTA】PAT(A)1012最高ランク(25分)

ディレクトリ

問題

ポータル:1012年ベストランク(25分)

溶液

分析

 3人の被験者の学生、および算出された成績平均点がありますが、それぞれのパフォーマンスが順位を持つことになり、そして今、あなたは最高ランクの一人の学生の出力(4種類の最高ランクスコア)、および対応するアカウントを作りたい
 与えられた場合コースの学生の4種類がすでに存在している情報をランキング順位が与えられ、それが最小のランクを見つけ、シンプルで、ならびに対応する対象は、内部に出力することができます。
 4つの配列を作成することができ、各配列要素のための1つが、このソート配列は、排出順序まで、アレイ内の位置の結果に応じて学生に対応して設けられ、被験者および対応するスコアを学生番号が格納されますそれは、トップステップに入った後、各コースのランキング。
 コードが良い見ていない、何のメモリアレイは、長いカオス符号をもたらす4つのアレイではありません。

コード

#include <bits/stdc++.h>
using namespace std;

struct my_rank {
    int C_r, M_r, E_r, A_r;
};

bool my_comp(pair<int, string> p1, pair<int, string> p2) {
    return p1.first > p2.first;
}

void setRank(vector<pair<int, string> > vec, map<string, my_rank> &my_map, int flag) {
    int last_value, last_rank, rank;
    for (int i = 0; i < vec.size(); i++) {
        if (i == 0) {
            last_value = vec[0].first;
            last_rank = 1;
            rank = 1;
        } else if (vec[i].first == last_value) {
            rank = last_rank;
        } else {
            rank = i + 1;
            last_value = vec[i].first;
            last_rank = rank;
        }

        switch (flag) {
            case 1: 
                my_map[vec[i].second].C_r = rank;
                break;
            case 2: 
                my_map[vec[i].second].M_r = rank;
                break;
            case 3: 
                my_map[vec[i].second].E_r = rank;
                break;
            case 4: 
                my_map[vec[i].second].A_r = rank;
                break;
        }
    }
}

void print_max(map<string, my_rank> &my_map, string id) {
    if (my_map.count(id) == 0) {
        cout << "N/A" << endl;
        return;
    }
    int front_rank = 999999;
    char ch;
    my_rank mr = my_map[id];

    if (mr.A_r < front_rank) {
        front_rank = mr.A_r;
        ch = 'A';
    }
    if (mr.C_r < front_rank) {
        front_rank = mr.C_r;
        ch = 'C';
    }
    if (mr.M_r < front_rank) {
        front_rank = mr.M_r;
        ch = 'M';
    }
    if (mr.E_r < front_rank) {
        front_rank = mr.E_r;
        ch = 'E';
    }

    cout << front_rank << " " << ch << endl;
}

int main(void) {
    vector<pair<int, string> > C_S, M_S, E_S, A_S;
    map<string, my_rank> my_map;
    int N, M;

    cin >> N >> M;
    int c, m, e, a;
    string id;
    for (int i = 0; i < N; i++) {
        cin >> id >> c >> m >> e;
        a = (c + m +  e) / 3;
        C_S.push_back(make_pair(c, id));
        M_S.push_back(make_pair(m, id));
        E_S.push_back(make_pair(e, id));
        A_S.push_back(make_pair(a, id));
    }
    sort(C_S.begin(), C_S.end(), my_comp);
    sort(M_S.begin(), M_S.end(), my_comp);
    sort(E_S.begin(), E_S.end(), my_comp);
    sort(A_S.begin(), A_S.end(), my_comp);
    setRank(C_S, my_map, 1);
    setRank(M_S, my_map, 2);
    setRank(E_S, my_map, 3);
    setRank(A_S, my_map, 4);

    for (int i = 0; i < M; i++) {
        cin >> id;
        print_max(my_map, id);
    }
}

おすすめ

転載: www.cnblogs.com/by-sknight/p/11479187.html