Cod sursa(job #2532827)

Utilizator MerlinTheWizardMelvin Abibula MerlinTheWizard Data 28 ianuarie 2020 13:45:45
Problema Trie Scor 5
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include<bits/stdc++.h>
using namespace std;
int c;
ifstream f("trie.in");
ofstream g("trie.out");
struct trie
{
    int val,nr;
    trie *fii[27];
};
char x[29];
trie *t = new trie();
void adauga(trie*poz, char*s)
{
    poz->nr++;
    if(*s=='\0')
    {
        poz->val++;
        return;
    }
    if(poz->fii[*s-'a']==NULL)
    {
        poz->fii[*s-'a']=new trie();
    }
    adauga(poz->fii[*s-'a'], s+1);
}
void stergere(trie*poz, char*s)
{
    poz->nr--;
    if(*s=='\0')
    {
        poz->val--;
        return;
    }
    if(poz->fii[*s-'a']==NULL)
    {
        return;
    }
}
int copy1(trie*poz,char*s)
{
    if(*s=='\0')
    {
        return poz->val;
    }
    if (poz->fii[*s-'a'] == NULL)
    {
        return 0;
    }
    return copy1(poz->fii[*s-'a'],s+1);
}
int copy2(trie*poz,char*s,int pasi)
{
    if(*s=='\0')
    {
        return pasi;
    }
    if (poz->fii[*s-'a'] == NULL)
    {
        return pasi;
    }
    else
        return copy2(poz->fii[*s-'a'],s+1,pasi+1);
}
int main()
{
    while(f>>c>>x)
    {
        if(c==0)
        {
            adauga(t,x);
        }
        else if(c==1)
            stergere(t,x);
        else if(c==2)
            g<<copy1(t,x)<<"\n";
        else
            g<<copy2(t,x,0)<<"\n";
        }
        for (int i=1;i<=26;++i)
        {
            x[i]='\0';
        }
}