Pagini recente » Cod sursa (job #177013) | Cod sursa (job #896140) | Cod sursa (job #841065) | Cod sursa (job #2857341) | Cod sursa (job #2158225)
#include <cstdio>
#include <cstring>
using namespace std;
struct trie
{
int cnt,nr;
trie *son[30];
trie()
{
cnt=0;
nr=0;
for(int i=0; i<='z'-'a'; ++i)
son[i]=NULL;
}
}*T;
int tip;
char s[25];
void adauga(trie *T,char *s)
{
if(strlen(s)==0)
{
T->cnt++;
return;
}
if(T->son[*s-'a']==NULL)
{
T->son[*s-'a']=new trie;
T->nr++;
}
adauga(T->son[*s-'a'],s+1);
}
void sterge(trie *T,char *s)
{
if(strlen(s)==0)
{
T->cnt--;
return;
}
sterge(T->son[*s-'a'],s+1);
if(T->son[*s-'a']->nr==0 && T->son[*s-'a']->cnt==0)
{
T->nr--;
T->son[*s-'a']=NULL;
}
}
int nrap(trie *T,char *s)
{
if(T==NULL)
return 0;
if(strlen(s)==0)
return T->cnt;
nrap(T->son[*s-'a'],s+1);
}
int prefix(trie *T,char *s)
{
if(strlen(s)==0 || T->son[*s-'a']==NULL)
return 0;
return 1+prefix(T->son[*s-'a'],s+1);
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
T=new trie;
while(!feof(stdin))
{
scanf("%d %s\n",&tip,&s);
if(tip==0)
adauga(T,s);
if(tip==1)
sterge(T,s);
if(tip==2)
printf("%d\n",nrap(T,s));
if(tip==3)
printf("%d\n",prefix(T,s));
}
return 0;
}