Pagini recente » Cod sursa (job #62969) | Cod sursa (job #36574) | Cod sursa (job #108880) | Cod sursa (job #124607) | Cod sursa (job #339425)
Cod sursa(job #339425)
#include<cstdio>
#include<cstring>
int op;
char str[30];
struct node
{
node *a[26];
int c;
};
node top;
char c,d;
node *x;
void add(char *a)
{
x = ⊤
while(*a!=0)
{
c = *a - 'a';
if(x->a[c]==NULL)
{
x->a[c] = new node;
memset(x->a[c],0,sizeof(node));
}
x = x->a[c];
++a;
}
++(x->c);
}
void del(char* a,node *y)
{
if(*a==0)
{
y->c --;
return;
}
del(a+1,y->a[*a-'a']);
c = *a - 'a';
x = y->a[c];
if(x->c == 0)
{
for(d=0;d<26;++d)
if(x->a[d]!=NULL) break;
if(d==26)
{
delete x;
y->a[c] = NULL;
}
}
}
int count(char* a)
{
x = ⊤
while(*a!=0)
{
c = *a - 'a';
if(x->a[c]==NULL)
{
x->a[c] = new node;
memset(x->a,0,sizeof(a));
}
x = x->a[c];
++a;
}
return x->c;
}
int nr;
int comm(char* a)
{
nr = 0;
x = ⊤
while(*a!=0)
{
c = *a - 'a';
if(x->a[c]==NULL)
break;
++nr;
x = x->a[c];
++a;
}
return nr;
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
while(!feof(stdin))
{
scanf("%d %s ",&op,str);
switch(op)
{
case 0:
add(str);
break;
case 1:
del(str,&top);
break;
case 2:
printf("%d\n",count(str));
break;
case 3:
printf("%d\n",comm(str));
break;
}
}
fclose(stdout);
return 0;
}