Pagini recente » Cod sursa (job #180824) | Cod sursa (job #2068047) | Cod sursa (job #1796154) | Istoria paginii runda/simuare_oni_2010/clasament | Cod sursa (job #1891639)
///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;
}