Cod sursa(job #810146)

Utilizator geniucosOncescu Costin geniucos Data 9 noiembrie 2012 19:00:49
Problema Trie Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 1.95 kb
#include<cstdio>
#include<cstring>
using namespace std;
int i,nr,lp,l;
char s[25];
struct nod
{
    int nrfii,nrt;
    nod *urm[26];
    nod()
    {
        nrfii=nrt=0;
        memset(urm,0,sizeof(urm));
    }
};
nod *q,*t,*p;
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
t=new nod;
t->nrt=0;
t->nrfii=0;
while(!feof(stdin))
{
    gets(s+1);
    if(feof(stdin)) break;
    if(s[1]>'3'||s[1]<'0') break;
    if(s[1]=='0')
    {
        l=strlen(s+1);
        p=t;
        for(i=3;i<=l;i++)
        {
            if(p->urm[s[i]-'a']==0)
            {
                p->nrfii++;
                q=new nod;
                p->urm[s[i]-'a']=q;
                q->nrfii=0;
                q->nrt=0;
                p=q;
            }
            else
            {
                p->nrfii++;
                p=p->urm[s[i]-'a'];;
            }
            if(i==l)
                p->nrt++;
        }
    }
    else
    if(s[1]=='1')
    {
        l=strlen(s+1);
        p=t;
        for(i=3;i<=l;i++)
        {
            if(p->nrfii==1)
            {
                delete p;
                break;
            }
            else
            {
                p->nrfii--;
                p=p->urm[s[i]-'a'];
            }
            if(i==l) p->nrt--;
        }
    }
    else
    if(s[1]=='2')
    {
        l=strlen(s+1);
        p=t;
        for(i=3;i<=l;i++)
        {
            if(p->urm[s[i]-'a']==0)
            {
                printf("0\n");
                break;
            }
            p=p->urm[s[i]-'a'];
        }
        if(i>l) printf("%d\n",p->nrt);
    }
    else
    if(s[1]=='3')
    {
        l=strlen(s+1);
        p=t;
        lp=0;
        for(i=3;i<=l;i++)
        {
            if(p->urm[s[i]-'a']==0||p->nrfii==0) break;
            p=p->urm[s[i]-'a'];
            lp++;
        }
        printf("%d\n",lp);
    }
}
return 0;
}