Pagini recente » Cod sursa (job #2574067) | Cod sursa (job #3159019) | Cod sursa (job #3159020) | Cod sursa (job #1028454) | Cod sursa (job #1519804)
#include<cstdio>
char s[21];
struct trie
{int cnt,nrfii;
trie *fii[26];
trie()
{cnt=nrfii=0;
for(int i=0;i<26;i++)
fii[0]=NULL;
}
};
trie *T;
void insert(trie *nod,char *s)
{if(*s==NULL)
{nod->cnt++;
return;
}
if(nod->fii[*s-'a']==NULL)
{nod->fii[*s-'a']=new trie;
nod->nrfii++;
}
insert(nod->fii[*s-'a'],s+1);
}
bool remove(trie *nod,char *s)
{if(*s==NULL)
nod->cnt--;
else
if(remove(nod->fii[*s-'a'],s+1)==1)
{nod->nrfii--;
nod->fii[*s-'a']=NULL;
}
if(nod!=T&&nod->nrfii==0&&nod->cnt==0)
{delete nod;
return 1;
}
return 0;
}
int count(trie *nod,char *s)
{if(*s==NULL)
{return nod->cnt;
}
if(nod->fii[*s-'a']==NULL)
return 0;
return count(nod->fii[*s-'a'],s+1);
}
int prefix(trie *nod,char *s)
{if(*s==NULL)
return 0;
if(nod->fii[*s-'a']==NULL)
return 0;
return 1+prefix(nod->fii[*s-'a'],s+1);
}
int main ()
{freopen ("trie.in","r",stdin);
freopen ("trie.out","w",stdout);
int x,y;
scanf("%d",&x);
T=new trie;
while(scanf("%s",&s)!=EOF)
{if(x==0)
insert(T,s);
else
if(x==1)
remove(T,s);
else
if(x==2)
{y=count(T,s);
printf("%d\n",y);
}
else
{y=prefix(T,s);
printf("%d\n",y);
}
scanf("%d",&x);
}
return 0;
}