Cod sursa(job #2509506)

Utilizator BaraianTudorBaraian Tudor Stefan BaraianTudor Data 14 decembrie 2019 12:02:00
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
char c[27];
int n;
struct trie
{
    int cuv,nrfii;
    trie* fii[26];
    trie()
    {
        cuv=nrfii=0;
        for(int i=0;i<26;i++)
        {
            fii[i]=NULL;
        }
    }
};
trie *t;
void adaug(char *s,trie *&nod)
{
    if(nod==NULL)
        nod=new trie();
    if(*s==0)
        nod->cuv++;
    else
    {
        nod->nrfii++;
        adaug(s+1,nod->fii[*s-'a']);
    }
}
int sterg(char *s,trie *&nod)
{
    if(*s==0)
    nod->cuv--;
    else
    {
        sterg(s+1,nod->fii[*s-'a']);
        nod->nrfii--;
    }
    if(nod->cuv + nod->nrfii==0)
    {
        delete (nod);
        nod=NULL;
    }
}
int apar(char *s,trie *&nod)
{
    if(nod==NULL)return 0;
    if(*s==0)return nod->cuv;
    else return apar(s+1,nod->fii[*s-'a']);
}
int pref(char *s,trie *&nod)
{
    if(nod==NULL)
        return -1;
    if(*s==0)
        return 0;
    return pref(s+1,nod->fii[*s-'a'])+1;
}
int main()
{
    t=new trie;
    while(in>>n>>c)
    {
        if(n==0)adaug(c,t);
        if(n==1)sterg(c,t);
        if(n==2)out<<apar(c,t)<<'\n';
        if(n==3)out<<pref(c,t)<<'\n';
    }
    return 0;
}