ABC 295

Table of Contents

D - Three Days Ago

解説 AC

void solve() {
    string S;
    cin >> S;

    int n = S.size();
    vvll v(n + 1, vll(10, 0));
    rep(i, n) {
        v[i + 1][S[i] - '0']++;
    }

    rep(k, 10) {
        rep(i, n) {
            v[i + 1][k] += v[i][k];
            v[i + 1][k] %= 2;
        }
    }

    vll cnt(1 << 10, 0);
    rep2(i, 0, n + 1) {
        int x = 0;
        rep(k, 10) {
            x *= 2;
            if (v[i][k])
                x += 1;
        }
        cnt[x]++;
    }

    ll ans = 0;
    rep(i, 1 << 10) {
        ans += cnt[i] * (cnt[i] - 1) / 2;
    }
    cout << ans << endl;
}