Pagini recente » Cod sursa (job #392777) | Cod sursa (job #731589) | Cod sursa (job #239874) | Cod sursa (job #673087) | Cod sursa (job #1199589)
#include<cstdio>
#include<cstring>
struct sp
{
int intreg,num;
sp *p[26];
sp()
{
int i;
intreg=0;
num=0;
for(i=0;i<=25;i++)
p[i]=NULL;
}
~sp() {
int i;
for(i=0;i<=25;i++)
delete p[i];
}
};
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
sp *lnd=new sp();
sp *pnt;
int op,i,m;
char s1[50];
while(scanf("%d %s",&op, s1)!=EOF)
{
//printf("%d %s\n", op, s1);
m=strlen(s1);
if(op==0)
{
pnt=lnd;
for(i=0;i<m;i++)
{
pnt->num++;
if(pnt->p[s1[i]-'a']==NULL)
pnt->p[s1[i]-'a']=new sp();
pnt=pnt->p[s1[i]-'a'];
}
pnt->num++;
pnt->intreg++;
}
if(op==1)
{
pnt=lnd;
for(i=0;i<m;i++)
{
pnt->num--;
if(pnt->p[s1[i]-'a']->num==1)
{
delete pnt->p[s1[i]-'a'];
pnt->p[s1[i]-'a']=NULL;
break;
}
pnt=pnt->p[s1[i]-'a'];
}
pnt->num--;
pnt->intreg--;
}
if(op==2)
{
pnt=lnd;
for(i=0;i<m;i++)
{
if(pnt->p[s1[i]-'a']==NULL)
break;
pnt=pnt->p[s1[i]-'a'];
}
if(i==m)
printf("%d\n",pnt->intreg);
else
printf("0\n");
}
if(op==3)
{
pnt=lnd;
for(i=0;i<m;i++)
{
if(pnt->p[s1[i]-'a']==NULL)
break;
pnt=pnt->p[s1[i]-'a'];
}
printf("%d\n",i);
}
}
delete lnd;
return 0;
}