Cod sursa(job #954218)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 28 mai 2013 19:14:16
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.62 kb
#include<cstdio>
#include<cstring>
using namespace std;
struct Trie
{
    int Was,Count;
    Trie *Son[26];
    Trie()
    {
        memset(Son,0,sizeof(Son));
        Count=Was=0;
    }
};
Trie *Root,*Aux;
int Key,Letter,Pre;
char Word[25],*p;
int main()
{
    freopen("trie.in","r",stdin);
    freopen("trie.out","w",stdout);
    Root=new Trie;
    while(scanf("%d %s",&Key,Word)+1)
    {
        if(Key==0)
        {
            for(Aux=Root,p=Word;*p;p++)
            {
                Letter=*p-'a';
                if(!Aux->Son[Letter]) Aux->Son[Letter]=new Trie;
                Aux=Aux->Son[Letter];
                Aux->Was++;
            }
            Aux->Count++;
            continue;
        }
        if(Key==1)
        {
            for(Aux=Root,p=Word;*p;p++)
            {
                Letter=*p-'a';
                Aux=Aux->Son[Letter];
                Aux->Was--;
            }
            Aux->Count--;
            continue;
        }
        if(Key==2)
        {
            for(Aux=Root,p=Word;*p;p++)
            {
                Letter=*p-'a';
                Aux=Aux->Son[Letter];
                if(!Aux || !Aux->Was) break;
            }
            if(!Aux) printf("0\n");
            else printf("%d\n",Aux->Count);
            continue;
        }
        if(Key==3)
        {
            for(Pre=0,Aux=Root,p=Word;*p;p++)
            {
                Letter=*p-'a';
                Aux=Aux->Son[Letter];
                if(!Aux || !Aux->Was) break;
                Pre++;
            }
            printf("%d\n",Pre);
        }
    }
    return 0;
}