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

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

AtCoder ABC 008 B - 投票 (5Q, 試験管茶色)

制約が小さいので for 文だけでも解けるし、map などを使うともっと楽になる。

問題概要

 N 個の文字列  S_{1}, S_{2}, \dots, S_{N} が与えられる。

登場回数の最も多い文字列を答えよ(タイがある場合はどれを答えても良い)。

制約

  •  1 \le N \le 50
  •  1 \le |S_{i}| \le 50

考えたこと

次の連想配列を用いて解いた


map<string, int>型変数nums`

nums[str]:文字列 str が何個あるか


コード

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

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

    // 連想配列 num
    map<string, int> nums;
    for (int i = 0; i < N; i++) {
        cin >> S;
        nums[S]++;
    }

    // 最大個数を求める
    int max_num = 0;
    string res;
    for (auto [str, num] : nums) {
        if (max_num < num) {
            max_num = num;
            res = str;
        }
    }
    cout << res << endl;
}