Pagini recente » Cod sursa (job #2211230) | Cod sursa (job #547527) | Cod sursa (job #2914481) | Cod sursa (job #247370) | Cod sursa (job #1882395)
#include <iostream>
#include <fstream>
#include <string.h>
#define CH (*s - 'a')
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct Trie
{
int cnt,nrfii;
Trie *fii[26];
Trie()
{
cnt=0,nrfii=0;
memset( fii, 0, sizeof( fii ) );
}
};
Trie *T = new Trie;
void t_insert(Trie *nod,char s[])
{
if ( *s == '\0' ) {nod->cnt++;return;}
if(nod->fii[CH] == 0)
{
nod->fii[ CH ] = new Trie;
nod->nrfii++;
}
t_insert(nod->fii[CH], s+1);
}
int t_delete( Trie *nod, char *s )
{
if( *s == '\0' )
nod->cnt --;
else if( t_delete( nod->fii[ CH ], s+1 ) ) {
nod->fii[ CH ] = 0;
nod->nrfii --;
}
if( nod->cnt == 0 && nod->nrfii == 0 && nod != T ) {
delete nod; return 1;
}
return 0;
}
int t_querry(Trie *nod,char s[])
{
if(*s=='\0')
return nod->cnt;
if(nod->fii[CH])
return t_querry(nod->fii[CH],s+1);
return 0;
}
int t_prefix(Trie *nod,char s[],int k)
{
if( *s == '\0' || nod->fii[ CH ] == 0 ) return k;
return t_prefix(nod->fii[CH],s+1,k+1);
}
int main()
{
int op;
char cuv[36];
while(f>>op>>cuv)
{
if (op==0) t_insert(T,cuv);
if (op==1) t_delete(T,cuv);
if (op==2) g<<t_querry(T,cuv)<<'\n';
if (op==3) g<<t_prefix(T,cuv,0)<<'\n';
}
}