Cod sursa(job #3340408)

Utilizator Vcitor09Solcanu Victor Vcitor09 Data 14 februarie 2026 10:37:28
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.69 kb
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct nod{
    int frec[26]={},cnt=0,nr=0;
};
int n,x,y;
vector<nod>v(1);
string w;
void insert(string s){
    int y=0;
    for(int i=0;i<s.size();++i){
        if(!v[y].frec[s[i]-'a']){
            v[y].frec[s[i]-'a']=v.size();
            v.emplace_back();
        }
        y=v[y].frec[s[i]-'a'];
        v[y].nr++;
    }
    v[y].cnt++;

}
void erase(string s){
    int y=0;
    for(int i=0;i<s.size();++i){
        y=v[y].frec[s[i]-'a'];
        v[y].nr--;
    }
    v[y].cnt--;
    y=0;
    for(int i=0;i<s.size();++i){
        if(v[v[y].frec[s[i]-'a']].nr==0) {
            v[y].frec[s[i]-'a']=0;
            return;
        }
        y=v[y].frec[s[i]-'a'];
    }
}
int count( string s){
    int y=0;
    for(int i=0;i<s.size();++i){
        if(v[y].frec[s[i]-'a']){
            y=v[y].frec[s[i]-'a'];
        }
        else return 0;
    }
    return v[y].cnt;
}
int  pref( string s){
    int y=0,lg=0;
    for(int i=0;i<s.size();++i){
        if(!v[y].frec[s[i]-'a']) return lg;
        y=v[y].frec[s[i]-'a'];
        lg++;
    }
    return lg;
}
int main()
{
    freopen("trie.in","r",stdin);
    freopen("trie.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    //insert("abcd");
    //for(auto it: v){
       // cout<<it.nr<<' '<<it.cnt<<'\n';
    //}
    while(cin>>x>>w){
        if(x==0){
            insert(w);
        }
        else if(x==1){
            erase(w);
        }
        else if(x==2){
            cout<<count(w)<<'\n';
        }
        else if(x==3){
            cout<<pref(w)<<'\n';
        }
    }
    return 0;
}