Pagini recente » Cod sursa (job #20712) | Cod sursa (job #3041858) | Cod sursa (job #2704747) | Cod sursa (job #496046) | Cod sursa (job #308897)
Cod sursa(job #308897)
#include<cstdio>
const int N=26;
const int L=21;
struct nod
{
int nrvar,nrc;
nod* fii[N];
nod()
{
nrc=nrvar=0;
for(int i=0;i<N;++i)
fii[i]=0;
}
};
void adaug(nod *p,char *s)
{
++p->nrvar;
if(*s==0)
{
++p->nrc;
return;
}
if(p->fii[*s-'a'] == 0)
p->fii[*s-'a'] = new nod();
adaug(p->fii[*s-'a'],s+1);
}
nod* sterg(nod *p,char *s)
{
--p->nrvar;
if(*s)
p->fii[*s-'a']=sterg(p->fii[*s-'a'],s+1);
else
--p->nrc;
if(p->nrvar==0)
{
delete p;
p=0;
}
return p;
}
int nrap(nod *p,char *s)
{
if(*s==0)
return p->nrc;
if(p->fii[*s-'a']==0)
return 0;
return nrap(p->fii[*s-'a'],s+1);
}
int prefix(nod *p,char *s)
{
if(*s==0)
return 0;
if(p->fii[*s-'a']==0)
return 0;
return 1+prefix(p->fii[*s-'a'],s+1);
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
int op;
char s[L];
nod *rad=0;
while(scanf("%d %s\n",&op,s) != EOF)
{
//printf("rezolv operatia: %d %s\n",op,s);
if(rad==0)
rad=new nod;
if(op==0)
{
adaug(rad,s);
continue;
}
if(op==1)
{
rad=sterg(rad,s);
continue;
}
if(op==2)
{
printf("%d\n",nrap(rad,s));
continue;
}
if(op==3)
{
printf("%d\n",prefix(rad,s));
continue;
}
}
return 0;
}