Cod sursa(job #1199589)

Utilizator dobrebogdanDobre Bogdan Mihai dobrebogdan Data 19 iunie 2014 18:38:00
Problema Trie Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 1.88 kb
#include<cstdio>
#include<cstring>
struct sp
{
    int intreg,num;
    sp *p[26];

    sp()
    {
        int i;
        intreg=0;
        num=0;
        for(i=0;i<=25;i++)
        p[i]=NULL;
    }

    ~sp() {
        int i;
        for(i=0;i<=25;i++)
            delete p[i];
    }
};

int main()
{
    freopen("trie.in","r",stdin);
    freopen("trie.out","w",stdout);
    sp *lnd=new sp();
    sp *pnt;
    int op,i,m;
    char s1[50];
    while(scanf("%d %s",&op, s1)!=EOF)
    {
        //printf("%d %s\n", op, s1);
        m=strlen(s1);

        if(op==0)
        {
            pnt=lnd;
            for(i=0;i<m;i++)
            {
                pnt->num++;
                if(pnt->p[s1[i]-'a']==NULL)
                    pnt->p[s1[i]-'a']=new sp();
                pnt=pnt->p[s1[i]-'a'];
            }
            pnt->num++;
            pnt->intreg++;
        }
        if(op==1)
        {
            pnt=lnd;
            for(i=0;i<m;i++)
            {
                pnt->num--;
                if(pnt->p[s1[i]-'a']->num==1)
                {
                    delete pnt->p[s1[i]-'a'];
                    pnt->p[s1[i]-'a']=NULL;
                    break;
                }
                pnt=pnt->p[s1[i]-'a'];
            }
            pnt->num--;
            pnt->intreg--;
        }
        if(op==2)
        {
             pnt=lnd;
            for(i=0;i<m;i++)
            {
                if(pnt->p[s1[i]-'a']==NULL)
                break;
                pnt=pnt->p[s1[i]-'a'];
            }
            if(i==m)
            printf("%d\n",pnt->intreg);
            else
            printf("0\n");
        }
        if(op==3)
        {
            pnt=lnd;
            for(i=0;i<m;i++)
            {
                if(pnt->p[s1[i]-'a']==NULL)
                break;
                pnt=pnt->p[s1[i]-'a'];
            }
            printf("%d\n",i);
        }
    }
    delete lnd;
    return 0;
}