Cod sursa(job #1146025)

Utilizator Alexghita96Ghita Alexandru Alexghita96 Data 18 martie 2014 17:27:29
Problema Trie Scor 75
Compilator cpp Status done
Runda Arhiva educationala Marime 1.68 kb
#include <fstream>
#include <memory.h>

#define L *Cuvant - 'a'

using namespace std;

class Trie
{
private:
    int NrCuv, NrFii;
public:
    Trie *F[30];
    Trie()
    {
        NrCuv = NrFii = 0;
        memset(F, sizeof(F), 0);
    }
    void Inserare(char *Cuvant)
    {
        if (*Cuvant)
        {
            if (!F[L])
            {
                F[L] = new Trie;
                NrFii++;
            }
            F[L] -> Inserare(Cuvant + 1);
        }
        else
            NrCuv++;
    }
    bool Stergere(char *Cuvant)
    {
        if (!*Cuvant)
            NrCuv--;
        else if (F[L] -> Stergere(Cuvant + 1))
        {
            delete F[L];
            F[L] = 0;
            NrFii--;
        }
        if (NrCuv || NrFii)
            return false;
        return true;
    }
    int NrApar(char *Cuvant)
    {
        if (*Cuvant)
        {
            if (F[L])
                return F[L] -> NrApar(Cuvant + 1);
            return 0;
        }
        return NrCuv;
    }
    int Prefix(char *Cuvant, int lg)
    {
        if (*Cuvant)
        {
            if (F[L])
                return F[L] -> Prefix(Cuvant + 1, lg + 1);
        }
        return lg;
    }
} T;

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

void Rezolvare()
{
    int op;
    char cuv[30];
    while(fin >> op >> cuv)
    {
        if (op == 0)
            T.Inserare(cuv);
        else if (op == 1)
            T.Stergere(cuv);
        else if (op == 2)
            fout << T.NrApar(cuv) << "\n";
        else
            fout << T.Prefix(cuv, 0) << "\n";
    }
}

int main()
{
    Rezolvare();

    return 0;
}