たなしょのメモ

日々勉強していることをつらつらと

C. Green Bin

はじめに

たなしょです。

今回のC問題は難しいですね。

問題文

https://atcoder.jp/contests/abc137/tasks/abc137_c

考え方

for (int i = 0; i < N; i++) {
    cin >> s[i];
    sort(s[i].begin(), s[i].end());
}

文字列を入力したらその文字列を並び替える。

sort(s.begin(), s.end());

N個の配列に文字列を格納した後、配列をソートする。

for (int i = 1; i < N; i++) {
    if (s[i] == s[i - 1]) {
        cnt++;
        ans += cnt;
    } else {
       cnt = 0;
    }
}

配列に格納されている文字列が一致する場合はcntを1つ追加して、

ansに足して代入する。

いざ実装

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#include <cstdlib>
#include <string>

typedef long long ll;

using namespace std;

int main() {
    int N;

    cin >> N;

    vector<string> s(N);

    for (int i = 0; i < N; i++) {
        cin >> s[i];
        sort(s[i].begin(), s[i].end());
    }

    sort(s.begin(), s.end());

    ll ans = 0;
    int cnt = 0;

    for (int i = 1; i < N; i++) {
        if (s[i] == s[i - 1]) {
            cnt++;
            ans += cnt;
        } else {
            cnt = 0;
        }
    }

    cout << ans << endl;

    return 0;
}

最後に

C問題難しすぎます。

最後まで読んでいただいてありがとうございました。 もしよろしければtwitterアカウント(@piklus100yen)もフォローしていただけると幸いです!