Cod sursa(job #2157360)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 9 martie 2018 16:11:42
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
# include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie{
    int fii,nr;
    trie *nx[26];
    trie(){
        fii=nr=0;
        for(int i=0;i<26;i++)
            nx[i]=NULL;
    }
}*tata;
char cuv[25];
int op;
void add(trie *nod,char *s){
    if(*s==NULL){
        nod->nr++;
        return;
    }
    if(nod->nx[*s-'a']==NULL){
        nod->nx[*s-'a']=new trie;
        nod->fii++;
    }
    add(nod->nx[*s-'a'],s+1);
}
void sterge(trie *nod,char *s){
    if(*s==NULL){
        nod->nr--;
        return;
    }
    sterge(nod->nx[*s-'a'],s+1);
    if(nod->nx[*s-'a']->fii==0&&nod->nx[*s-'a']->nr==0){
        delete nod->nx[*s-'a'];
        nod->nx[*s-'a']=NULL;
        nod->fii--;
    }
}
int aparitii(trie *nod,char *s){
    if(*s==NULL)
        return nod->nr;
    if(nod->nx[*s-'a']==NULL)
        return 0;
    return aparitii(nod->nx[*s-'a'],s+1);
}
int prefix(trie *nod,char *s){
    if(*s==NULL)
        return 0;
    if(nod->nx[*s-'a']==NULL)
        return 0;
    return prefix(nod->nx[*s-'a'],s+1)+1;
}
int main () {
    tata=new trie;
    while(fin>>op>>cuv){
        if(op==0){
            add(tata,cuv);
            continue;
        }
        if(op==1){
            sterge(tata,cuv);
            continue;
        }
        if(op==2){
            fout<<aparitii(tata,cuv)<<"\n";
            continue;
        }
        fout<<prefix(tata,cuv)<<"\n";
    }
    return 0;
}