174382025-07-16 16:23:13peti1234Magiccpp17Elfogadva 100/10057ms6828 KiB
#include <bits/stdc++.h>

using namespace std;
#define ull unsigned long long
const int c=100005, mod=1e9+7;
int n, t[c], db[c];
ull val[c], sum;
map<ull, int> m;
long long ans;
int main()
{
    mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
    ull x=uniform_int_distribution<long long>(0, 1e18)(rng);
    cin >> n;
    for (int i=1; i<=n; i++) {
        char c;
        cin >> c;
        if ('a'<=c && c<='z') {
            t[i]=1+c-'a';
        } else {
            t[i]=26+1+c-'A';
        }
        db[t[i]]++;
    }
    int ut=0;
    for (int i=1; i<=52; i++) {
        if (db[i]) {
            val[i]=uniform_int_distribution<long long>(0, 1e18)(rng);
            sum+=val[i];
            ut=i;
        }
    }
    val[ut]-=sum;
    m[0]++;
    sum=0;
    for (int i=1; i<=n; i++) {
        sum+=val[t[i]];
        ans+=m[sum]++;
    }
    cout << ans%mod << "\n";
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask110/10
1Elfogadva1ms316 KiB
2Elfogadva1ms316 KiB
subtask220/20
1Elfogadva1ms316 KiB
2Elfogadva1ms316 KiB
3Elfogadva1ms316 KiB
4Elfogadva2ms316 KiB
5Elfogadva1ms316 KiB
subtask330/30
1Elfogadva1ms316 KiB
2Elfogadva3ms316 KiB
3Elfogadva4ms564 KiB
4Elfogadva8ms564 KiB
5Elfogadva8ms648 KiB
subtask440/40
1Elfogadva8ms564 KiB
2Elfogadva4ms1076 KiB
3Elfogadva6ms564 KiB
4Elfogadva9ms820 KiB
5Elfogadva57ms6824 KiB
6Elfogadva57ms6828 KiB
7Elfogadva9ms820 KiB
8Elfogadva9ms692 KiB