Pagini recente » Cod sursa (job #1637838) | Cod sursa (job #278265) | Cod sursa (job #3171918) | Cod sursa (job #1726217) | Cod sursa (job #2183825)
#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';
}
}