Cod sursa(job #1218996)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 13 august 2014 01:46:41
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.86 kb
//#include<cstdio>
#include<cstring>
#include<fstream>
using namespace std;
int n;
char s[50];
struct trie{
    int n;
    int nf;
    trie *v[27];
    trie(){
        n=nf=0;
        for(int i=0;i<=26;i++){
            v[i]=0;
        }
    }
} *t=new trie();
//FILE *f,*g;
ifstream fin("trie.in");
ofstream fout("trie.out");
void insertt(trie *nod, char *c){
    if(*c==0){
        nod->n++;
        return;
    }
    if(nod->v[*c-'a']==0){
        nod->v[*c-'a']=new trie();
        nod->nf++;
    }
    insertt(nod->v[*c-'a'],c+1);
}
int deletet(trie *&nod, char *c){
    if(*c==0){
        nod->n--;
        if(nod->n==0 && nod->nf==0 && t!=nod){
            delete nod;
            nod=0;
            return 1;
        }
        return 0;
    }
    if(deletet(nod->v[*c-'a'],c+1)==1){
        nod->nf--;
        if(nod->n==0 && nod->nf==0 && t!=nod){
            delete nod;
            nod=0;
            return 1;
        }
        return 0;
    }
}
int nrt(trie *nod, char *c){
    if(*c==0){
        return nod->n;
    }
    if(nod->v[*c-'a']!=0){
        return nrt(nod->v[*c-'a'],c+1);
    }
    return 0;
}
int prefixt(trie *nod, char *c, int q){
    if(*c==0)
        return q;
    if(nod->v[*c-'a']!=0){
        return prefixt(nod->v[*c-'a'],c+1,q+1);
    }
    return q;
}
int main(){
  //  f=fopen("trie.in","r");
    //g=fopen("trie.out","w");
    while(fin>>n>>s){
        //fscanf(f,"%d %s",&n,s);
        if(n==0){
            insertt(t,s);
        }
        if(n==1){
            deletet(t,s);
        }
        if(n==2){
            //fprintf(g,"%d\n",nrt(t,s));
            fout<<nrt(t,s)<<'\n';

        }
        if(n==3){
            //fprintf(g,"%d\n",prefixt(t,s,0));
            fout<<prefixt(t,s,0)<<'\n';
        }
    }






   // fclose(f);
    //fclose(g);
    return 0;
}