#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;
}
| Subtask | Sum | Test | Verdict | Time | Memory | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 10/10 | ||||||
| 1 | Accepted | 1ms | 316 KiB | ||||
| 2 | Accepted | 1ms | 316 KiB | ||||
| subtask2 | 20/20 | ||||||
| 1 | Accepted | 1ms | 316 KiB | ||||
| 2 | Accepted | 1ms | 316 KiB | ||||
| 3 | Accepted | 1ms | 316 KiB | ||||
| 4 | Accepted | 2ms | 316 KiB | ||||
| 5 | Accepted | 1ms | 316 KiB | ||||
| subtask3 | 30/30 | ||||||
| 1 | Accepted | 1ms | 316 KiB | ||||
| 2 | Accepted | 3ms | 316 KiB | ||||
| 3 | Accepted | 4ms | 564 KiB | ||||
| 4 | Accepted | 8ms | 564 KiB | ||||
| 5 | Accepted | 8ms | 648 KiB | ||||
| subtask4 | 40/40 | ||||||
| 1 | Accepted | 8ms | 564 KiB | ||||
| 2 | Accepted | 4ms | 1076 KiB | ||||
| 3 | Accepted | 6ms | 564 KiB | ||||
| 4 | Accepted | 9ms | 820 KiB | ||||
| 5 | Accepted | 57ms | 6824 KiB | ||||
| 6 | Accepted | 57ms | 6828 KiB | ||||
| 7 | Accepted | 9ms | 820 KiB | ||||
| 8 | Accepted | 9ms | 692 KiB | ||||