Pagini recente » Cod sursa (job #3276335) | Cod sursa (job #2727610) | Cod sursa (job #2609538) | Cod sursa (job #1939923) | Cod sursa (job #2998680)
#include <bits/stdc++.h>
#define N 2008
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct Node
{
int words;
int ap;
Node *next[27];
Node(){
words = 0;
memset( next, 0, sizeof(next) );
}
};
string s;
void Add( Node *nod, int i )
{
nod->ap++;
if( i == s.size() )
{
nod->words++;
return;
}
if( nod->next[ s[i] - 'a' ] == 0 )
{
nod->next[ s[i] - 'a' ] = new Node;
}
Add( nod->next[ s[i] - 'a' ], i+1 );
}
void Delete( Node *nod, int i, bool &sters )
{
if( i == s.size() )
{
nod->words--;
if( nod->words == 0 && nod->ap == 0 )
{
delete nod;
}
sters = 1;
return;
}
Delete( nod->next[ s[i] - 'a' ], i+1, sters );
if( sters )
nod->next[ s[i] - 'a' ] = 0, nod->ap--;
sters = 0;
}
int Search( Node *nod, int i )
{
if( !nod ) return 0;
if( i == s.size() )
return nod->words;
else
return Search( nod->next[ s[i] - 'a' ], i+1 );
}
int Query( Node *nod, int i )
{
if( i == s.size() )
return i;
if( nod->next[ s[i] - 'a' ] == 0 )
return i;
return Query( nod->next[ s[i] - 'a' ], i+1 );
}
void Citire()
{
int task;
Node *root = new Node;
while( fin >> task )
{
bool sters;
fin >> s;
if( task == 0 )
Add( root, 0 );
if( task == 1 )
Delete( root, 0, sters );
if( task == 2 )
fout << Search( root, 0 ) << "\n";
if( task == 3 )
fout << Query( root, 0 ) << "\n";
}
}
void Rezolvare()
{
}
int main()
{
Citire();
Rezolvare();
return 0;
}