Cod sursa(job #2065805)

Utilizator patcasrarespatcas rares danut patcasrares Data 14 noiembrie 2017 11:11:59
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include<fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int type;
char a[25];
struct trie
{
    int nra=0,nrc=0;
    trie *urm[27]={0};
};
trie *t=new trie;
void inserare(trie *nod,char *s)
{
    if(*s=='\n')
    {
        nod->nra++;
        return;
    }
    if(nod->urm[*s-'a']==0)
    {
        nod->urm[*s-'a']=new trie;
        nod->nrc++;
    }
    inserare(nod->urm[*s-'a'],s+1);
}
int del(trie *nod,char *s)
{
    if(*s=='\n')
        nod->nra--;
    else
        if(del(nod->urm[*s-'a'],s+1))
        {
            nod->nrc--;
            nod->urm[*s-'a']=0;
        }
    if(nod->nrc==0&&nod->nra==0&&nod!=t)
    {
        delete nod;
        return 1;
    }
    return 0;
}
int apcuv(trie *nod,char *s)
{
    if(*s=='\n')
        return nod->nra;
    if(nod->urm[*s-'a'])
        return apcuv(nod->urm[*s-'a'],s+1);
    return 0;
}
int prefix(trie *nod,char *s,int k)
{
    if(*s=='\n'||nod->urm[*s-'a']==0)
        return k;
    return prefix(nod->urm[*s-'a'],s+1,k+1);
}
int main()
{
    while(fin>>type)
    {
        fin>>a;
        if(type==0)
            inserare(t,a);
        if(type==1)
            del(t,a);
        if(type==2)
            fout<<apcuv(t,a)<<'\n';
        if(type==3)
            fout<<prefix(t,a,0)<<'\n';
    }
}