hogecoder

tsutaj 競技プログラミングの記録

AOJ 0061: Rank Checker

問題概要

原文 → チームの順位 | Aizu Online Judge

チーム番号とそのチームの成績が与えられるので、その情報をもとに、チーム番号を与えられたらそのチームの順位を返すプログラムを作成せよ。(順位の決定方法に関しては原文を参照)

解説

まあmap使うだけなんですが、個人的にmapに不慣れなので一応記事に残しておきます。完全に自分用だけど同じ悩みをお持ちの方はご自由にお使いください。

まずauto型の登場はC++11以降なので、提出のときは注意が必要。値を表示させるなど、参照するだけなら変数に&をつける必要はないけど、値を書き換えたりしたい場合は&をつける必要があります。

auto型の詳しいことはここを参照されたし。
C++11 範囲ベース for ループ 入門

あと、mapの要素はキーと値のpair型なので、取り出すときはfirstとかsecondとか使います。(バカなのでこれをしょっちゅう忘れる)

map2つ使ったりとかしたらこんがらがりますね。でも実装軽くなるからいいのかな・・・?

#include <bits/stdc++.h>
using namespace std;
 
int main() {
    map<int, int> a; // 整理番号と正解数をリンク
    map<int, int> m; // 正解数と順位をリンク
    int x, y;
    while(~scanf("%d,%d\n", &x, &y)) {
        if(x == 0 && y == 0) break;
        a[x] = y; m[y];
    }

    int j = 1;
    for(auto &s : m) s.second = j++;

    int n;
    while(cin >> n) cout << j - m[a[n]] << endl;
    return 0;
}

どうでもいいけど、C++14で提出したらC++14提出一覧に自分のSubmissionしかなくて恥ずかしいことになった。

AIZU ONLINE JUDGE: Solution