Pagini recente » Cod sursa (job #1953717) | Cod sursa (job #2245003) | Cod sursa (job #2955884) | Cod sursa (job #1909514) | Cod sursa (job #1355653)
#include<cstdio>
#include<cstring>
using namespace std;
int lg,op;
char s[100],*p;
struct trie
{
trie *fiu[26];
int nrfii,nrap;
trie()
{
nrfii=nrap=0;
for(int i=0;i<=25;i++)
{
fiu[i]=NULL;
}
}
};
trie *r;
void insert(trie *t,char *s)
{
if(strlen(s)==0)
{
t->nrap++;
return;
}
if(t->fiu[s[0]-'a']==NULL)
{
t->fiu[s[0]-'a']=new trie;
t->nrfii++;
}
insert(t->fiu[s[0]-'a'],s+1);
return;
}
int remove(trie *t,char *s)
{
if(*s==0)
{
t->nrap--;
if(t->nrap==0&&t->nrfii==0&&t!=r)
{
delete t;
t=0;
return 1;
}
return 0;
}
if(remove(t->fiu[*s-'a'],s+1))
{
t->nrfii--;
if(t->nrap==0&&t->nrfii==0&&t!=r)
{
delete t;
t=0;
return 1;
}
}
return 0;
}
int nrwords(trie *t,char *s)
{
if(strlen(s)==0)
{
return t->nrap;
}
if(t->fiu[s[0]-'a']==NULL)
{
return 0;
}
return nrwords(t->fiu[s[0]-'a'],s+1);
}
int prefix(trie *t,char *s)
{
if(t->fiu[s[0]-'a']==NULL||!strlen(s))
{
return 0;
}
return 1+prefix(t->fiu[s[0]-'a'],s+1);
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
r=new trie;
while(!feof(stdin))
{
scanf("%d %s\n",&op,&s);
p=s;
if(op==0)
{
insert(r,p);
}
if(op==1)
{
remove(r,p);
}
if(op==2)
{
printf("%d\n",nrwords(r,p));
}
if(op==3)
{
printf("%d\n",prefix(r,p));
}
}
}