Pagini recente » Cod sursa (job #765416) | Cod sursa (job #765418)
Cod sursa(job #765418)
#include<cstdio>
#include<cstring>
using namespace std;
struct Nod
{int c,n;
Nod *f[26];
Nod()
{c=n=0;
memset(f,0,sizeof(f));}};
char l[32];
Nod *t=new Nod;
void A(Nod *s,char *l)
{if((*l)=='\n')
{++s->c;
return;}
if(!s->f[(*l)-'a'])
s->f[(*l)-'a']=new Nod,++s->n;
A(s->f[(*l)-'a'],l+1);}
int D(Nod *s,char *l)
{if((*l)=='\n')
--s->c;
else
if(D(s->f[(*l)-'a'],l+1))
s->f[(*l)-'a']=0,--s->n;
if(!s->c&&!s->n&&s!=t)
{delete s;
return 1;}
return 0;}
int C(Nod *s,char *l)
{if((*l)=='\n')
return s->c;
if(s->f[(*l)-'a'])
return C(s->f[(*l)-'a'],l+1);
return 0;}
int E(Nod *s,char *l,int k)
{if((*l)=='\n'||!s->f[(*l)-'a'])
return k;
return E(s->f[(*l)-'a'],l+1,k+1);}
int main()
{freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
fgets(l,32,stdin);
while(!feof(stdin))
{if(!l[0])
A(t,l+2);
else
if(l[0]==1)
D(t,l+2);
else
if(l[0]==2)
printf("%d\n",C(t,l+2));
else
if(l[0]==3)
printf("%d\n",E(t,l+2,0));
fgets(l,32,stdin);}
return 0;}