304212026-07-05 20:38:14KristófMagiccpp17Hibás válasz 0/10013ms5896 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.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ÖsszpontTesztVerdiktIdőMemória
subtask10/10
1Hibás válasz1ms316 KiB
2Hibás válasz1ms316 KiB
subtask20/20
1Hibás válasz1ms316 KiB
2Hibás válasz1ms316 KiB
3Hibás válasz1ms508 KiB
4Hibás válasz1ms316 KiB
5Hibás válasz2ms316 KiB
subtask30/30
1Hibás válasz2ms564 KiB
2Hibás válasz3ms1332 KiB
3Hibás válasz7ms3148 KiB
4Hibás válasz12ms5876 KiB
5Hibás válasz13ms5684 KiB
subtask40/40
1Hibás válasz12ms5892 KiB
2Hibás válasz3ms820 KiB
3Hibás válasz7ms3124 KiB
4Hibás válasz13ms5896 KiB
5Hibás válasz13ms5684 KiB
6Hibás válasz13ms5888 KiB
7Hibás válasz13ms5768 KiB
8Hibás válasz13ms5892 KiB