Pagini recente » Cod sursa (job #3285986) | Cod sursa (job #1945273) | Cod sursa (job #327822) | Cod sursa (job #1502239) | Cod sursa (job #2998687)
#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;
ap = 0;
memset( next, 0, sizeof(next) );
}
};
Node *root = new Node;
string s;
void Add( Node *nod, int i )
{
if( i == s.size() )
{
nod->words++;
return;
}
if( nod->next[ s[i] - 'a' ] == 0 )
{
nod->ap++;
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--;
}
else
{
Delete( nod->next[ s[i] - 'a' ], i+1, sters );
if( sters )
nod->next[ s[i] - 'a' ] = 0, nod->ap--;
}
if( nod->words == 0 && nod->ap == 0 && nod != root )
{
delete nod;
sters = 1;
}
else 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;
while( fin >> task )
{
bool sters = 0;
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;
}