304192026-07-05 20:29:07KristófMagiccpp17Hibás válasz 30/100119ms65536 KiB
#include <iostream>
#include <vector>
#include <set>
#include <map>
#define int long long
using namespace std;
string s;
int n;
int k;
vector<vector<int>> pref;


signed main()
{
    set<char> dif;
    cin>>n>>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>,int> 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ÖsszpontTesztVerdiktIdőMemória
subtask110/10
1Elfogadva1ms316 KiB
2Elfogadva1ms500 KiB
subtask220/20
1Elfogadva1ms316 KiB
2Elfogadva2ms564 KiB
3Elfogadva2ms564 KiB
4Elfogadva4ms2100 KiB
5Elfogadva1ms316 KiB
subtask30/30
1Elfogadva3ms724 KiB
2Elfogadva7ms1696 KiB
3Elfogadva13ms3380 KiB
4Elfogadva27ms6620 KiB
5Hibás válasz26ms6976 KiB
subtask40/40
1Hibás válasz25ms6896 KiB
2Elfogadva23ms9524 KiB
3Elfogadva17ms4404 KiB
4Elfogadva50ms13032 KiB
5Futási hiba119ms65536 KiB
6Futási hiba119ms65536 KiB
7Elfogadva61ms17696 KiB
8Elfogadva71ms20956 KiB