Pagini recente » Cod sursa (job #1811756) | Cod sursa (job #565391) | Cod sursa (job #3223274) | Cod sursa (job #2595194) | Cod sursa (job #336635)
Cod sursa(job #336635)
#include <stdio.h>
#include <string.h>
struct trie
{
trie *nxt[26];
int nr;
trie();
};
trie::trie()
{
nr = 0;
memset(nxt,0,sizeof(nxt));
}
trie *t = new trie;
trie *r = t;
char s[32];
int i,l,max;
inline void insert()
{
l=strlen(s);
t = r;
for (i=0;i<l;i++)
{
if (t->nxt[s[i]-'a'] == 0)
{
t->nxt[s[i]-'a'] = new trie;
t->nxt[s[i]-'a']->nr = 0;
}
if (i==l-1)
{
t->nxt[s[i]-'a']->nr++;
}
t = t->nxt[s[i]-'a'];
}
}
inline void del()
{
l=strlen(s);
t = r;
for (i=0;i<l;i++)
{
if (t->nxt[s[i]-'a'] == 0)
{
return;
}
t = t->nxt[s[i]-'a'];
}
if (t->nr>0)
{
t->nr--;
}
}
inline void prefix()
{
l=strlen(s);
t = r;
max = 0;
for (i=0;i<l;i++)
{
if (t->nxt[s[i]-'a'] == 0)
{
printf("%d\n",max);
return;
}
max++;
t = t->nxt[s[i]-'a'];
}
if (t->nr != 0)
{
printf("%d\n",l-1);
}
else
{
printf("%d\n",max);
}
}
inline void type()
{
l=strlen(s);
t = r;
for (i=0;i<l;i++)
{
if (t->nxt[s[i]-'a'] == 0)
{
printf("0\n");
return;
}
t = t->nxt[s[i]-'a'];
}
printf("%d\n",t->nr);
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
int op;
while (!feof(stdin))
{
scanf("%d %s",&op,&s);
switch(op)
{
case 0:
insert();break;
case 1:
del();break;
case 2:
type();break;
case 3:
prefix();break;
}
}
t= r;
return 0;
}