Cod sursa(job #1488324)

Utilizator armandpredaPreda Armand armandpreda Data 18 septembrie 2015 19:07:26
Problema Trie Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>

using namespace std;

int op;
char s[20], *p;
struct node
{
    int nr, nr_fii;
    node *fiu[26], *tata;
} *trie;
node *nou(node *tata)
{
    node *n=new node;
    n->nr=n->nr_fii=0;
    for(int i=0; i<26; ++i)
        n->fiu[i]=0;
    n->tata=tata;
    return n;
}
node *look_up(node *nod)
{
    if(*p=='\0') return nod;
    if(nod->fiu[ *p-'a' ]==NULL)
        nod->fiu[ *p-'a' ]=nou(nod);
    char c=*p;
    p++;
    return look_up(nod->fiu[ c-'a' ]);
}
int main()
{
    freopen("trie.in", "r", stdin);
    freopen("trie.out", "w", stdout);
    trie=nou(NULL);
    while(scanf("%d %s", &op, s)!=EOF)
    {
        p=s;
        node *x=look_up(trie);
        int delta=0;
        if(op==0) delta=1;
        if(op==1) delta=-1;
        x->nr+=delta;
        node *cop=x;
        int ans3=0;
        while(x->tata!=NULL)
        {
            if(x->nr_fii>1) ans3++;
            x->nr_fii+=delta;
            x=x->tata;
        }
        x=cop;
        if(op==2)
            printf("%d\n", x->nr);
        if(op==3)
            printf("%d\n", ans3);
    }
    return 0;
}