Cod sursa(job #3349062)

Utilizator Dia3141Costea Diana Stefania Dia3141 Data 25 martie 2026 11:30:50
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
int task,r;
string s;
struct trie{
    int cuv,prefix;
    trie* fr[26];
    trie(){
        cuv=prefix=0;
        for(int i=0;i<26;i++)
            fr[i]=nullptr;
    }
};
trie* root=new trie;
void add(trie* nod,int i){
    (*nod).prefix++;
    if(s[i]==0){
        (*nod).cuv++;
        return ;
    }
    if((*nod).fr[s[i]-'a']==nullptr)
        (*nod).fr[s[i]-'a']=new trie;
    add((*nod).fr[s[i]-'a'],i+1);
}
void erase(trie* nod,int i){
    (*nod).prefix--;
    if(s[i]==0){
        (*nod).cuv--;
        return ;
    }
    erase((*nod).fr[s[i]-'a'],i+1);
}
void aparitii(trie* nod,int i){
    if(s[i]==0){
        r=(*nod).cuv;
        return ;
    }
    if((*nod).fr[s[i]-'a']==nullptr)
        return ;
    aparitii((*nod).fr[s[i]-'a'],i+1);
}
void maxi(trie* nod,int i){
    if((*nod).prefix!=0)
        r=i;
    else
        return ;
    if(s[i]==0||(*nod).fr[s[i]-'a']==nullptr)
        return ;
    maxi((*nod).fr[s[i]-'a'],i+1);
}
signed main()
{
    while(cin>>task>>s){
        if(task==0)
            add(root,0);
        else if(task==1)
            erase(root,0);
        else{
            r=0;
            if(task==2)
                aparitii(root,0);
            else
                maxi(root,0);
            cout<<r<<'\n';
        }
    }
    return 0;
}