けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 231 B - Election (6Q, 灰色, 200 点)

map などの連想配列を用いて、集計処理しよう!

問題概要

選挙で  N 人が投票し、それぞれ名前が  S_{1}, S_{2}, \dots, S_{N} である候補者に投票した。

得票数が最大の候補者の名前を答えよ。なお、得票数が最大の候補者は一意に定まることが保証される。

制約

  •  1 \le N \le 100

考えたこと

各文字列が何個ずつあるのかを集計しょう! 具体的には、次の連想配列を用意しよう。C++ では、map<string, int> 型が適している(Python では辞書型が適している)。


  • ma[str] ← 名前が str である候補者の得票数

集計処理を終えたあとは、ma[str] の値が最大であるような str を探索すればよい。

map 型の使い方については、下のコードを参照。

コード

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

int main() {
    int N;
    cin >> N;

    map<string, int> ma;
    for (int i = 0; i < N; i++) {
        string S;
        cin >> S;
        ma[S]++;
    }

    int max_num = 0;
    string max_str = "";
    for (auto [str, num] : ma) {
        if (num > max_num) {
            // 最大値を更新するとき
            max_num = num;
            max_str = str;
        }
    }
    cout << max_str << endl;
}