Cod sursa(job #1918753)

Utilizator VladG26Ene Vlad-Mihai VladG26 Data 9 martie 2017 16:46:53
Problema Trie Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 1.63 kb
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct nod
{
    int ap,nrFii;
    nod *F[26];
    nod()
    {
        nrFii=ap=0;
        for(int i=0; i<26; i++)
            F[i]=0;
    }
};

nod *root,*q,*aux,*aux2;
int i;
int lg,l;

void insertCuv(char cuvant[])
{
    for(i=0,q=root; i<lg; i++)
    {
        if(!(q->F[*(cuvant+i)-'a']))
        {
            aux=new nod;
            aux->ap=0;
            q->F[*(cuvant+i)-'a']=aux;
        }
        q=q->F[*(cuvant+i)-'a'];
        //cout<<*(cuv+i)<<" ";
    }
    //cout<<endl;
    q->ap+=1;
}

void deleteCuvant(char cuvant[])
{
    for(i=0,q=root; i<lg; i++)
    {
        q=q->F[*(cuvant+i)-'a'];
    }
    q->ap-=1;
}

void aparitieCuvant(char cuvant[])
{
    for(i=0,q=root; i<lg; i++)
    {
        if(!(q->F[*(cuvant+i)-'a']))
        {
            printf("0\n");
            return;
        }
        q=q->F[*(cuvant+i)-'a'];
    }
    printf("%d\n",q->ap);
}

void prefix(char cuvant[])
{
    q=root;
    l=0;
    while(l<lg&&q->F[(*(cuvant+l)-'a')])
    {
        //cout<<*(cuv+l)<<" ";
        q=q->F[(*(cuvant+l)-'a')];
        l++;
    }
    printf("%d\n",l);
}

int main()
{
    int op;
    char cuv[22];
    freopen("trie.in","r",stdin);
    freopen("trie.out","w",stdout);
    root =new nod;

    for(; scanf("%d %s\n",&op,cuv)+1;)
    {
        lg=strlen(cuv);
        if(op==0)
            insertCuv(cuv);
        if(op==1)
            deleteCuvant(cuv);
        if(op==2)
            aparitieCuvant(cuv);
        if(op==3)
            prefix(cuv);
    }
    return 0;
}