Cod sursa(job #2183825)

Utilizator vlasiuflaviusVlasiu Flavius vlasiuflavius Data 23 martie 2018 14:49:57
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <fstream>
#define CH ( *s - 'a' )
using namespace std;
ofstream fout ("trie.out");
ifstream fin ("trie.in");
struct Trie
{
    int fii,crt;
    Trie *v[26];
    Trie()
    {
        fii = crt = 0;
        for( int i = 0 ; i < 26 ; i++ )
            v[ i ] = 0;
    }
};
Trie *T = new Trie();
int n;
char s[30];
void ins( Trie *nod , char *s )
{
    if( CH < 0 )
    {
        nod -> crt++;
        return;
    }
    if( nod -> v[ CH ] == 0 )
    {
        nod -> v[ CH ] = new Trie;
        nod -> fii++;
    }
    ins( nod -> v[ CH ] , s + 1 );
}
bool del( Trie *nod , char *s )
{
    if( CH < 0 )
        nod -> crt--;
    else if( del( nod -> v[ CH ] , s + 1 ) )
    {
        nod -> v[ CH ] = 0;
        nod -> fii--;
    }
    if( nod -> crt == 0 && nod -> fii == 0 && nod != T )
        return 1;
    return 0;
}
int nr_apar( Trie *nod , char *s )
{
    if( CH < 0 )
        return nod -> crt;
    return( nr_apar( nod -> v[ CH ] , s + 1 ) );
}
int prefix( Trie *nod , char *s , int nr )
{
    if( CH < 0 )
        return nr;
    if( nod -> v[ CH ] == 0 )
        return nr;
    prefix( nod -> v[ CH ] , s + 1 , nr + 1 );
}
int main()
{
    while( fin>>n>>s )
    {
        if( n == 0 )
            ins( T , s );
        if( n == 1 )
            del( T , s );
        if( n == 2 )
            fout<<nr_apar( T , s )<<'\n';
        if( n == 3 )
            fout<<prefix( T , s , 0 )<<'\n';
    }
}