Cod sursa(job #3242046)

Utilizator Dia3141Costea Diana Stefania Dia3141 Data 8 septembrie 2024 11:26:51
Problema Trie Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <fstream>
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
int c,nod,p;
char s[21];
struct Nod{
    int prefix,cuvant,fr[27];
}trie[100001];
void add(int n){
    trie[n].prefix++;
    if(s[p]==0)
        trie[n].cuvant++;
    else{
        if(trie[n].fr[s[p]-'a']==0)
            trie[n].fr[s[p]-'a']=++nod;
        p++;
        add(trie[n].fr[s[p-1]-'a']);
    }
}
void drop(int n){
    trie[n].prefix--;
    if(s[p]==0)
        trie[n].cuvant--;
    else
        p++,drop(trie[n].fr[s[p-1]-'a']);
}
int nr(int n){
    if(s[p]==0)
        return trie[n].cuvant;
    p++;
   if( trie[n].fr[s[p-1]-'a'])
    return nr(trie[n].fr[s[p-1]-'a']);
    else
        return 0;
}
int lgpref;
void pref_max(int n, int lg){
    if(trie[n].prefix>0){

        lgpref=lg;
         if(s[p]==0)
              return;
           if(trie[n].fr[s[p]-'a']!=0)
        {
               p++;
               pref_max(trie[n].fr[s[p-1]-'a'], lg+1);
    }
    else
        return ;
    }
    else
        return ;
}
int main()
{
    while(cin>>c>>s){
        if(c==0){
            p=0;
            add(0);
        }else if(c==1){
            p=0;
            drop(0);
        }else if(c==2){
            p=0;
            cout<<nr(0)<<'\n';
        }else{
            p=0;lgpref=0;
            pref_max(0,0);
            cout<<lgpref<<'\n';
        }
    }
    return 0;
}