Pagini recente » Cod sursa (job #196948) | Cod sursa (job #1394147) | Cod sursa (job #2788566) | Cod sursa (job #1907037) | Cod sursa (job #1008476)
#include<fstream>
#include<iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int x;
char s[100];
struct Trie
{
int cnt, nrfii;
Trie *fiu[26];
Trie()
{
cnt = 0;
nrfii = 0;
memset(fiu,0,sizeof(fiu));
}
};
Trie *T = new Trie;
void ins(Trie *nod, char *s)
{
if(*s=='\n')
{
++nod->cnt;
return;
}
if(nod->fiu[*s-'a']==0)
{
nod->fiu[*s-'a'] = new Trie;
++nod->nrfii;
}
ins(nod->fiu[*s-'a'],s+1);
}
int del(Trie *nod, char *s)
{
if(*s == '\n')
--nod->cnt;
else if( del(nod->fiu[*s-'a'],s+1))
{
nod->fiu[*s-'a'] = 0;
--nod->nrfii;
}
if(nod->cnt == 0 && nod->nrfii == 0 && nod !=T)
{
delete nod;
return 1;
}
return 0;
}
int que(Trie *nod, char *s)
{
if(*s == '\n')
return nod->cnt;
if(nod->fiu[*s-'a'])
return que(nod->fiu[*s-'a'],s+1);
return 0;
}
int pre(Trie *nod, char *s, int k)
{
if(*s == '\n' || nod->fiu[*s-'a'] == 0)
return k;
return pre(nod->fiu[*s-'a'],s+1,k+1);
}
int main()
{
char line[ 32 ];
freopen( "trie.in","r",stdin );
freopen( "trie.out","w",stdout );
fgets(line,32,stdin );
while(!feof(stdin))
{
if(line[0]=='0')
ins(T, line+2);
if(line[0]=='1')
del(T, line+2);
if(line[0]=='2')
printf("%d\n",que(T, line+2));
if(line[0]=='3')
printf("%d\n",pre(T, line+2,0));
fgets( line, 32, stdin );
}
return 0;
}