Pagini recente » Cod sursa (job #418789) | Cod sursa (job #650104) | Cod sursa (job #2653918) | Cod sursa (job #90297) | Cod sursa (job #350474)
Cod sursa(job #350474)
#include<stdio.h>
#include<string.h>
char s[26],l;
int x;
struct nod
{
nod *u[28];
long nc,pf;
};
nod *t;
void init(nod *t)
{
int i;
for(i=0;i<26;++i) t->u[i]=0;
t->nc=t->pf=0;
}
void add()
{
int i;
nod *p, *aux;
p=t;
for(i=0;i<l-1;++i)
{
if(p->u[s[i]-'a'])
{
p=p->u[s[i]-'a'];
p->pf++;
}
else
{
aux=new nod;
init(aux);
p->u[s[i]-'a']=aux;
p=aux;
p->pf++;
}
}
if(p->u[s[i]-'a'])
{
p=p->u[s[i]-'a'];
p->pf++;
p->nc++;
}
else
{
aux=new nod;
init(aux);
p->u[s[i]-'a']=aux;
p=aux;
p->pf++;
p->nc++;
}
}
void del()
{
int i;
nod *p;
p=t;
for(i=0;i<l;++i)
{
p=p->u[s[i]-'a'];
p->pf--;
}
p->nc--;
}
void nrap()
{
int i;
nod *p;
p=t;
int t=1;
for(i=0;i<l;++i)
{
if(p->u[s[i]-'a'])
p=p->u[s[i]-'a'];
else
{
printf("0\n");return;
}
}
printf("%ld\n",p->nc);
}
/*void prefix()
{
int i;
nod *p;
p=t;
long L=0;
for(i=0;i<l;++i)
{
if(p->u[s[i]-'a'])
{
p=p->u[s[i]-'a'];
if(p->pf)
L++;
else
{
printf("%ld\n",L);return;
}
}
else
{
printf("%ld\n",L);return;
}
}
}*/
long prefix(nod *p, char *s, int pref)
{
if ((*s) == '\n' || p->u[(*s)-'a'] == 0)
return pref;
return prefix (p->u[(*s)-'a'], s+1, pref+1);
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
t=new nod;
init(t);
while(scanf("%d",&x)!=EOF)
{
scanf("%s",&s);
l=strlen(s);
if(x==0)
add();
else if(x==1)
del();
else if(x==2)
nrap();
else if(x==3)
printf("%ld\n",prefix(t,s,0));
}
return 0;
}