Pagini recente » Rating Alexandru Plesescu (AlexandruPlesescu) | Cod sursa (job #1180469) | Cod sursa (job #953469) | Profil Floarea_Raul | Cod sursa (job #845053)
Cod sursa(job #845053)
#include<stdio.h>
#include<string.h>
struct Trie
{
int nr,nf;
Trie *f[26];
Trie() {nr=nf=0;memset(f,0,sizeof(f));}
};
Trie *root=new Trie;
void add(Trie *T,char *s)
{
if(*s==0) T->nr++;
else
if(T->f[*s-'a']==0)
{
T->f[*s-'a']=new Trie;
T->nf++;
add(T->f[*s-'a'],s+1);
}
else
add(T->f[*s-'a'],s+1);
}
int query(Trie *T,char *s)
{
if(*s==0) return T->nr;
else
if(T->f[*s-'a'])
return query(T->f[*s-'a'],s+1);
return 0;
}
int del(Trie *T,char *s)
{
if(*s==0) T->nr--;
else
if(del(T->f[*s-'a'],s+1))
{
T->f[*s-'a']=0;
T->nf--;
}
if(T->nr==0 && T->nf==0) {delete T;return 1;}
return 0;
}
int solve(Trie *T,char *s)
{
if(*s==0 || T->f[*s-'a']==0) return 0;
else
return 1+solve(T->f[*s-'a'],s+1);
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
char s[32];
while(gets(s))
{
if(s[0]=='0') add(root,s+2);
else if(s[0]=='1') del(root,s+2);
else if(s[0]=='2') printf("%d\n",query(root,s+2));
else printf("%d\n",solve(root,s+2));
}
return 0;
}