Pagini recente » Cod sursa (job #2380920) | Cod sursa (job #22458) | Cod sursa (job #3261114) | Cod sursa (job #2591587) | Cod sursa (job #2332192)
#include <iostream>
#include <fstream>
#define MAXCH 26
using namespace std;
ifstream fin ( "trie.in" );
ofstream fout ( "trie.out" );
class Node {
public:
short int nrp, nrc;
Node* fii[MAXCH];
Node( ) {
nrp = nrc = 0;
for ( int i = 0; i < MAXCH; i++ )
fii[i] = NULL;
}
};
Node* Insert ( Node* node, char* s ) {
if ( node == NULL )
node = new Node;
node->nrp++;
if ( s[0] == '\0' )
node->nrc++;
else
node->fii[s[0] - 'a'] = Insert ( node->fii[s[0] - 'a'], s + 1 );
return node;
}
Node* Erase ( Node* node, char* s ) {
node->nrp--;
if ( s[0] == '\0' )
node->nrc--;
else
node->fii[s[0] - 'a'] = Erase ( node->fii[s[0] - 'a'], s + 1 );
if ( node->nrp == 0 ) {
delete ( node );
node = NULL;
}
return node;
}
short Search ( Node* node, char* s ) {
if ( node == NULL )
return 0;
if ( s[0] == '\0' )
return node->nrc;
else
return Search ( node->fii[s[0] - 'a'], s + 1 );
}
short Cmlpc ( Node* node, char* s ) {
if ( node == NULL )
return -1;
if ( s[0] == '\0' )
return 0;
else
return 1 + Cmlpc ( node->fii[s[0] - 'a'], s + 1 );
}
int main() {
int op;
char cuv[MAXCH];
Node* trie = NULL;
while ( fin >> op ) {
fin >> cuv;
if ( op == 0 )
trie = Insert ( trie, cuv );
else if ( op == 1 )
trie = Erase ( trie, cuv );
else if ( op == 2 )
fout << Search ( trie, cuv ) << '\n';
else
fout << Cmlpc ( trie, cuv ) << '\n';
}
return 0;
}