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

hamayanhamayan's blog

多眼生物の調査 [yukicoder No.706]

https://yukicoder.me/problems/no/706

解法

https://yukicoder.me/submissions/270303

まずは、全ての^の個数について何通りあるか数えよう。
cnt[i] := ^がi個続いている要素が何個あるか
mapを使って、これを予め計算しておく。
 
次は最も頻繁に出てくる数で、かつ^の個数が最も多いものを抽出したい。
これはpairをvectorに入れて降順ソートすることによって、解決した。
vector>を降順ソートすると、firstで降順ソートして、firstが同じであればsecondで降順ソートしてくれる。
firstに要素数、secondに^の個数を入れて降順ソートすれば最初の要素が答えとなる。
なので、これを用意して、ソートして、最初の要素のsecondを出力すれば答え。

int N;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    map<int, int> cnt;
    rep(i, 0, N) {
        string s; cin >> s;
        int n = s.length() - 2;
        cnt[n]++;
    }
    vector<pair<int, int>> v;
    fore(p, cnt) v.push_back({p.second, p.first});
    sort(all(v), greater<pair<int,int>>());

    int ans = v[0].second;
    cout << ans << endl;
}