Cod sursa(job #2351479)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 22 februarie 2019 13:59:35
Problema Trie Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.76 kb
#include <bits/stdc++.h>
using namespace std ;
ifstream in ("trie.in") ;
ofstream out ("trie.out") ;
struct nod
{
    int cnt = 1 , nr = 0 ;
    nod *son[ 30 ] = {0} ;
};
nod *T ;
void ins ( string s )
{
    int x ;
    nod *p , *q ;
    p = T ;
    for ( size_t i = 0 ; i < s.size() ; ++ i )
    {
        x = s [ i ] - 'a' ;
        if ( p->son[ x ] )
        {
            p = p -> son [ x ] ;
            p->cnt ++ ;
        }
        else
        {
            q = new nod ;
            p->son [ x ] = q ;
            p = p -> son [ x ] ;
        }
    }
    p->nr ++ ;
}
void del ( string s )
{
    int x ;
     nod *p ;
    p = T ;
    for ( size_t i = 0 ; i < s.size() ; ++ i )
    {
        x = s [ i ] - 'a' ;
        p=p->son[ x ] ;
        p->cnt -- ;

    }
    p->nr -- ;
}
void nrap ( string s )
{
     int x ;
     nod *p ;
    p = T ;
    for ( size_t i = 0 ; i < s.size() ; ++ i )
    {
        x = s [ i ] - 'a' ;
        if ( !p->son[x] || !p->son[x]->cnt )
        {
            out << "0\n" ;
            return ;
        }
        p = p->son [ x ] ;
    }
    out << p->nr << '\n' ;
}
void task ( string s )
{
    int x , sol = 0 ;
     nod *p ;
    p = T ;
    for ( size_t i = 0 ; i < s.size() ; ++ i )
    {
        x = s [ i ] - 'a' ;
        if ( !p->son[x] || !p->son[x]->cnt )
        {
            out << sol << "\n" ;
            return ;
        }
        sol ++ ;
        p = p-> son [ x ] ;
    }
    out << sol << '\n' ;
}
int main ()
{
    string s ;
    int tip ;
    T = new nod ;
    while ( in >> tip >> s )
    {
        if ( tip == 0 ) ins ( s ) ;
        if ( tip == 1 ) del ( s ) ;
        if ( tip == 2 ) nrap ( s ) ;
        if ( tip == 3 ) task ( s ) ;
    }
}