Pagini recente » Cod sursa (job #128984) | Cod sursa (job #422436) | Cod sursa (job #141752) | Cod sursa (job #3162149) | Cod sursa (job #309085)
Cod sursa(job #309085)
#include<stdio.h>
struct nod{
int nrp,nrc;
nod *fi[26];
nod(){
nrp=nrc=0;
for(int i=0;i<26;++i)
fi[i]=0;
}
};
void add(nod *p,char *s){
++p->nrp;
if(*s==0){
++p->nrc;
return;
}
if(p->fi[*s-'a']==0)
p->fi[*s-'a']=new nod();
add(p->fi[*s-'a'],s+1);
}
nod *del(nod *p,char *s){
--p->nrp;
if(*s==0)
--p->nrp;
else
p->fi[*s-'a']=del(p->fi[*s-'a'],s+1);
if(p->nrp==0){
delete p;
p=0;
}
return p;
}
int apar(nod *p,char *s){
if(*s==0)
return p->nrc;
if(p->fi[*s-'a']==0)
return 0;
return apar(p->fi[*s-'a'],s+1);
}
int prefix(nod *p,char *s){
if(*s==0)
return 0;
if(p->fi[*s-'a']==0)
return 0;
return 1+prefix(p->fi[*s-'a'],s+1);
}
int main(){
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
int x;
char s[32];
nod *tr=0;
while( scanf("%d %s\n",&x,&s) != EOF){
if(tr==0)
tr=new nod;
if(!x)
add(tr,s);
if(x==1)
tr=del(tr,s);
if(x==2)
printf("%d\n",apar(tr,s));
if(x==3)
printf("%d\n",prefix(tr,s));
}
fclose(stdin);
fclose(stdout);
return 0;
}