はまやんはまやんはまやん

hamayanhamayan's blog

Poll [AtCoder Beginner Contest 155 C]

https://atcoder.jp/contests/abc155/tasks/abc155_c

解説

https://atcoder.jp/contests/abc155/submissions/10161782

文字列をそれぞれ数えて、一番頻度の高いやつをまとめて答えるという問題。
指示されていることを実装するのだが、c++であればmapを使うのが最も簡単。
map<string,int>で使い、intで数えていく。
valueの最大値miを計算し、value=miであるkeyを答えればいい。
mapはkeyでソートされているため、順番に答えれば自然と辞書順で小さい順に出力できる。

int N;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    map<string, int> cnt;
    rep(i, 0, N) {
        string s; cin >> s;
        cnt[s]++;
    }

    int ma = -1;
    fore(p, cnt) chmax(ma, p.second);
    fore(p, cnt) if (p.second == ma) printf("%s\n", p.first.c_str());
}