Pagini recente » Cod sursa (job #307571) | Cod sursa (job #1724951) | Cod sursa (job #3271719) | Cod sursa (job #1387597) | Cod sursa (job #2331958)
#include <iostream>
#include <fstream>
#define MAXCH 26
using namespace std;
ifstream fin( "trie.in" );
ofstream fout( "trie.out" );
class Node
{
public:
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 )
{
delete(node);
node=NULL;
}
return node;
}
int 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);
}
int 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>>cuv )
switch( op )
{
case 0:
trie=insert(trie,cuv);
break;
case 1:
trie=erase(trie,cuv);
break;
case 2:
fout<<search(trie,cuv)<<endl;
break;
case 3:
fout<<cmlpc(trie,cuv)<<endl;
break;
}
return 0;
}