#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.ignore();
getline(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";
cout<<ans;
return 0;
}
| Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 0/10 | ||||||
| 1 | Hibás válasz | 1ms | 316 KiB | ||||
| 2 | Hibás válasz | 1ms | 316 KiB | ||||
| subtask2 | 0/20 | ||||||
| 1 | Hibás válasz | 1ms | 316 KiB | ||||
| 2 | Hibás válasz | 1ms | 316 KiB | ||||
| 3 | Hibás válasz | 1ms | 508 KiB | ||||
| 4 | Hibás válasz | 1ms | 316 KiB | ||||
| 5 | Hibás válasz | 2ms | 316 KiB | ||||
| subtask3 | 0/30 | ||||||
| 1 | Hibás válasz | 2ms | 564 KiB | ||||
| 2 | Hibás válasz | 3ms | 1332 KiB | ||||
| 3 | Hibás válasz | 7ms | 3148 KiB | ||||
| 4 | Hibás válasz | 12ms | 5876 KiB | ||||
| 5 | Hibás válasz | 13ms | 5684 KiB | ||||
| subtask4 | 0/40 | ||||||
| 1 | Hibás válasz | 12ms | 5892 KiB | ||||
| 2 | Hibás válasz | 3ms | 820 KiB | ||||
| 3 | Hibás válasz | 7ms | 3124 KiB | ||||
| 4 | Hibás válasz | 13ms | 5896 KiB | ||||
| 5 | Hibás válasz | 13ms | 5684 KiB | ||||
| 6 | Hibás válasz | 13ms | 5888 KiB | ||||
| 7 | Hibás válasz | 13ms | 5768 KiB | ||||
| 8 | Hibás válasz | 13ms | 5892 KiB | ||||