Pagini recente » Cod sursa (job #2639085) | Cod sursa (job #2655235) | Cod sursa (job #698429) | Cod sursa (job #1264804) | Cod sursa (job #1333613)
#include <cstdio>
using namespace std;
int tip;
char s[30];
struct trie
{
int ap,fii;
trie *v[26];
trie()
{
int i;
ap=0;
fii=0;
for (i=0;i<26;i++)
v[i]=0;
}
};
trie *t=new trie;
void inserare(trie *nod,char *p)
{
if (*p==0)
{
nod->ap++;
return;
}
if (nod->v[*p-'a']==0)
{
nod->v[*p-'a']=new trie;
nod->fii++;
}
inserare(nod->v[*p-'a'],p+1);
}
int stergere(trie *nod,char *p)
{
if (*p==0)
{
nod->ap--;
}
else if (stergere(nod->v[*p-'a'],p+1))
{
nod->v[*p-'a']=0;
nod->fii--;
}
if (nod->ap==0 && nod->fii==0 && nod!=t)
{
delete nod;
return 1;
}
return 0;
}
int num(trie *nod,char *p)
{
if (*p==0)
return nod->ap;
if (nod->v[*p-'a'])
return num(nod->v[*p-'a'],p+1);
return 0;
}
int pref(trie *nod,char *p,int k)
{
if (*p==0 || nod->v[*p-'a']==0)
return k;
return pref(nod->v[*p-'a'],p+1,k+1);
}
int main()
{
int i,j;
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
while (scanf("%d%s",&tip,&s)!=-1)
{
if (tip==0)
{
inserare(t,s);
}
else if (tip==1)
{
stergere(t,s);
}
else if (tip==2)
{
printf("%d\n",num(t,s));
}
else
{
printf("%d\n",pref(t,s,0));
}
}
}