304222026-07-05 20:46:13KristófMagiccpp17Elfogadva 100/100231ms54580 KiB
#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ÖsszpontTesztVerdiktIdőMemória
subtask110/10
1Elfogadva1ms316 KiB
2Elfogadva1ms316 KiB
subtask220/20
1Elfogadva1ms316 KiB
2Elfogadva2ms564 KiB
3Elfogadva2ms316 KiB
4Elfogadva4ms1332 KiB
5Elfogadva1ms316 KiB
subtask330/30
1Elfogadva2ms764 KiB
2Elfogadva6ms1468 KiB
3Elfogadva13ms3204 KiB
4Elfogadva26ms6196 KiB
5Elfogadva21ms6196 KiB
subtask440/40
1Elfogadva24ms6260 KiB
2Elfogadva18ms5508 KiB
3Elfogadva16ms3436 KiB
4Elfogadva41ms9552 KiB
5Elfogadva207ms54464 KiB
6Elfogadva231ms54580 KiB
7Elfogadva54ms11060 KiB
8Elfogadva57ms12596 KiB