Cod sursa(job #1891639)

Utilizator vlasiuflaviusVlasiu Flavius vlasiuflavius Data 24 februarie 2017 10:55:27
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.59 kb
///FLAVIUS, UBESTE-MA
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

#define ch (s[0]-'a')

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

struct Trie
{
    int val;
    Trie *v[26];
    Trie()
    {
        val = 0;
        for( int i = 0 ; i < 26 ; i++ )
            v[ i ] = 0;
    }
};

Trie *T;

int x;
char s[30];

void adauga( Trie *T , char *s )
{
    if( ch < 0 )
    {
        T -> val = T -> val + 1;
        return;
    }
    if( T -> v[ ch ] == 0 )
        T -> v[ ch ] = new Trie();

    adauga( T -> v[ ch ] , s + 1 );

}

void sterge( Trie *T , char *s )
{
    if( ch < 0 )
    {
        T -> val = T -> val - 1;
        return;
    }
    sterge( T -> v[ ch ] , s + 1 );
}

int aparitii( Trie *T , char *s )
{
    if( ch < 0 )
    {
        return T-> val;
    }

    if( T -> v[ ch ] == 0 )
        return 0;
    return aparitii( T -> v[ ch ] , s + 1 );
}

int suffix( Trie *T , char *s )
{
    if( ch < 0 )
    {
        return 1;
    }
    if( T -> v[ ch ] == 0 )
        return 1;
    return suffix( T -> v[ ch ] , s + 1 ) + 1;
}

int main()
{
    T = new Trie();
    while( fin>>x )
    {
        fin.get();
        fin.get( s , 25 );
        if( x == 0 )
        {
            adauga( T , s );
        }
        else if( x == 1 )
        {
            sterge( T , s );
        }
        else if( x == 2 )
        {
            fout<<aparitii( T , s )<<' ';
        }
        else
        {
            fout<<suffix( T , s )<<' ';;
        }
    }

    return 0;
}