Cod sursa(job #2152070)

Utilizator FredyLup Lucia Fredy Data 5 martie 2018 10:41:36
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin ("trie.in");
ofstream fout ("trie.out");

struct nod {
    int nr=0, nrfii=0;
    nod *fii[26] = {0};
};
nod *T;

void adauga (char *cuv, nod *T)
{
    if (cuv[0]==0)
    {
        T->nr++;
        return;
    }
    else
    {
        if (T->fii[cuv[0]-'a'] == 0)
        {
            T->nrfii++;
            T->fii[cuv[0]-'a'] = new nod;
        }
        adauga (cuv+1, T->fii[cuv[0]-'a']);
    }
}

void sterge (char *cuv, nod *T)
{
    if (cuv[0]==0)
    {
        T->nr--;
        return;
    }
    sterge (cuv+1, T->fii[cuv[0]-'a']);
    if (T->fii[cuv[0]-'a']->nrfii==0 && T->fii[cuv[0]-'a']->nr==0)
    {
       delete T->fii[cuv[0]-'a'];
       T->fii[cuv[0]-'a']=0;
       T->nrfii--;
    }
}

int nrAp (char *cuv, nod *T)
{
    if (cuv[0]==0)  return T->nr;
    if (T->fii[cuv[0]-'a'] == 0)    return 0;
    nrAp (cuv+1, T->fii[cuv[0]-'a']);
}

int prefMax (char *cuv, nod *T)
{
    if (cuv[0]==0)  return 0;
    if (T->fii[cuv[0]-'a'] == 0)    return 0;
    return prefMax (cuv+1, T->fii[cuv[0]-'a']) + 1;
}


int main()
{
    int tip;
    char cuv[25];
    T = new nod;
    while (fin>>tip)
    {
        fin>>cuv;
        if (tip==0) adauga (cuv, T);
        if (tip==1) sterge (cuv, T);
        if (tip==2) fout << nrAp (cuv, T) << '\n';
        if (tip==3) fout << prefMax (cuv, T) << '\n';
    }

    fout.close();
    return 0;
}