Pagini recente » Cod sursa (job #280841) | Cod sursa (job #2675736) | Cod sursa (job #861947) | Cod sursa (job #467624) | Cod sursa (job #1581962)
#include <cstdio>
#include<cstring>
using namespace std;
int p,n;
char s[22];
struct trie
{
int words,prefix;
trie *sons[26];
trie()
{
words=prefix=0;
memset(sons,0,sizeof(sons));
}
}*triee;
void add_word(char s[])
{
trie *q=triee;
triee->prefix++;
for(int i=0;i<n;i++)
{
if(q->sons[s[i]]==0)
q->sons[s[i]]=new trie;
q=q->sons[s[i]];
q->prefix++;
}
q->words++;
}
void delete_word(char s[])
{
trie *q=triee;
triee->prefix--;
for(int i=0;i<n;i++)
{
q=q->sons[s[i]];
q->prefix--;
}
q->words--;
}
int words(char s[])
{
trie *q=triee;
for(int i=0;i<n;i++)
{
if(q->sons[s[i]]==0)return 0;
q=q->sons[s[i]];
}
return q->words;
}
int prefix(char s[])
{
trie *q=triee;
for(int i=0;i<n;i++)
{
if(q->sons[s[i]]==0||q->sons[s[i]]->prefix==0)return i;
q=q->sons[s[i]];
}
return n;
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
triee=new trie;
while(scanf("%d %s",&p,&s)!=EOF)
{
n=strlen(s);
for(int i=0;i<n;i++)
s[i]-='a';
if(p==0)
add_word(s);
else if(p==1)
delete_word(s);
else if(p==2)
printf("%d\n",words(s));
else
printf("%d\n",prefix(s));
}
return 0;
}