Cod sursa(job #2282913)

Utilizator Raoul_16Raoul Bocancea Raoul_16 Data 14 noiembrie 2018 18:45:35
Problema Trie Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
//
//  Trie.cpp
//  
//
//  Created by Raoul Bocancea on 14/11/2018.
//

#include <fstream>
#include <cstring>
#define l *lit-'a'
using namespace std;
class trie
{
public:
    int nc,nf;
    trie *f[26];
    trie()
    {
        nc=nf=0;
        memset(f,0,sizeof f);
    }
    void ins(char *lit)
    {
        if(*lit)
        {
            if(!f[l])
            {
                ++nf;
                f[l]=new trie;
            }
            f[l]->ins(lit+1);
        }
        else
            ++nc;
    }
    bool del(char *lit)
    {
        if(!*lit)
            --nc;
        else if(f[l]->del(lit+1))
        {
            delete f[l];
            f[l]=0;
            --nf;
        }
        if(nc||nf)
            return 0;
        return 1;
    }
    int nap(char *lit)
    {
        if(*lit)
        {
            if(f[l])
                return f[l]->nap(lit+1);
            return 0;
        }
        return nc;
    }
    int pref(char *lit,int sz)
    {
        if(!*lit)
            return sz;
        if(f[l])
            return f[l]->pref(lit+1,sz+1);
        return sz;
    }
}t;
ifstream fin("trie.in");
ofstream fout("trie.out");
int main()
{
    int op;
    char cuv[21];
    while(fin>>op>>cuv)
        switch(op)
    {
        case 0:
            t.ins(cuv);
            break;
        case 1:
            t.del(cuv);
            break;
        case 2:
            fout<<t.nap(cuv)<<"\n";
            break;
        case 3:
            fout<<t.pref(cuv,0)<<"\n";
            break;
    }
    return 0;
}