Pagini recente » Cod sursa (job #1060742) | Cod sursa (job #1032235) | Cod sursa (job #2785043) | Cod sursa (job #2413872) | Cod sursa (job #1573219)
#include <cstdio>
#include <cstring>
int op,n;
struct trie
{
int cuvinte, prefixe;
trie *lit[26];
trie()
{
cuvinte=prefixe=0;
memset(lit, 0, sizeof(lit));
}
} *andr;
char s[23];
void adaug_cuv()
{
trie *q = andr;
andr->prefixe ++;
for(int i=0;i<n;i++)
{
if(q->lit[s[i]]==0) q->lit[s[i]]=new trie;
q=q->lit[s[i]];
q->prefixe++;
}
q->cuvinte++;
return;
}
void sterg_cuv()
{
trie *q = andr;
andr->prefixe --;
for(int i=0;i<n;i++)
{
q=q->lit[s[i]];
q->prefixe --;
}
q->cuvinte--;
return;
}
int numar_cuv()
{
trie *q = andr;
for(int i=0;i<n;i++)
{
if (q->lit[s[i]] == 0) return 0;
q=q->lit[s[i]];
}
return q->cuvinte;
}
int numar_pre()
{
trie *q = andr;
for(int i=0;i<n;i++)
{
if(q->lit[s[i]]==0 || q->lit[s[i]]->prefixe == 0) return i;
q=q->lit[s[i]];
}
return n;
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
andr = new trie;
while(1)
{
op=-1;
scanf("%d %s",&op,&s);
n=strlen(s);
for (int i=0;i<n;i++)
s[i]-='a';
if(op==-1)break;
if(op==0)adaug_cuv();
if(op==1)sterg_cuv();
if(op==2)printf("%d\n",numar_cuv());
if(op==3)printf("%d\n",numar_pre());
}
return 0;
}