#include <iostream>
#include <vector>
#include <set>
#include <map>
using namespace std;
using ll=long long;
string s;
int n;
int k;
vector<vector<int>> pref;
signed main()
{
set<char> dif;
cin>>n;
cin>>s;
for(auto x:s)dif.insert(x);
k=dif.size();
map<char,int> conv;
int id=1;
vector<int> a;
a.reserve(n);
for(auto &x:s)
{
if(conv[x]==0)
{
conv[x]=id++;
}
a.push_back(conv[x]);
}
pref.resize(n,vector<int>(k+1,0));
for(int i=0;i<n;i++)
{
for(int type=1;type<=k;type++)
{
if(i==0)break;
pref[i][type]=pref[i-1][type];
}
pref[i][a[i]]++;
}
long long ans=0;
map<vector<int>,ll> seen;
vector<int> base(k,0);
seen[base]=1;
for(int i=0;i<n;i++)
{
vector<int> dif(k);
for(int type=1;type<=k;type++)
{
dif[type-1]=pref[i][type]-pref[i][1];
}
int cnt=seen[dif];
ans+=cnt;
seen[dif]++;
}
//cout<<check(0,1)<<"\n";
int MOD=(1e9+7);
cout<<ans%MOD;
return 0;
}
| Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 10/10 | ||||||
| 1 | Elfogadva | 1ms | 316 KiB | ||||
| 2 | Elfogadva | 1ms | 316 KiB | ||||
| subtask2 | 20/20 | ||||||
| 1 | Elfogadva | 1ms | 316 KiB | ||||
| 2 | Elfogadva | 2ms | 564 KiB | ||||
| 3 | Elfogadva | 2ms | 316 KiB | ||||
| 4 | Elfogadva | 4ms | 1332 KiB | ||||
| 5 | Elfogadva | 1ms | 316 KiB | ||||
| subtask3 | 30/30 | ||||||
| 1 | Elfogadva | 2ms | 764 KiB | ||||
| 2 | Elfogadva | 6ms | 1468 KiB | ||||
| 3 | Elfogadva | 13ms | 3204 KiB | ||||
| 4 | Elfogadva | 26ms | 6196 KiB | ||||
| 5 | Elfogadva | 21ms | 6196 KiB | ||||
| subtask4 | 40/40 | ||||||
| 1 | Elfogadva | 24ms | 6260 KiB | ||||
| 2 | Elfogadva | 18ms | 5508 KiB | ||||
| 3 | Elfogadva | 16ms | 3436 KiB | ||||
| 4 | Elfogadva | 41ms | 9552 KiB | ||||
| 5 | Elfogadva | 207ms | 54464 KiB | ||||
| 6 | Elfogadva | 231ms | 54580 KiB | ||||
| 7 | Elfogadva | 54ms | 11060 KiB | ||||
| 8 | Elfogadva | 57ms | 12596 KiB | ||||