Pagini recente » Cod sursa (job #313972) | Cod sursa (job #2553677) | Cod sursa (job #298981) | Cod sursa (job #2153453) | Cod sursa (job #1488333)
#include <cstdio>
using namespace std;
int op;
char s[20], *p;
struct node
{
int nr, nr_fii;
node *fiu[26], *tata;
} *trie;
node *nou(node *tata)
{
node *n=new node;
n->nr=n->nr_fii=0;
for(int i=0; i<26; ++i)
n->fiu[i]=0;
n->tata=tata;
return n;
}
node *look_up(node *nod)
{
if(*p=='\0') return nod;
if(nod->fiu[ *p-'a' ]==NULL)
nod->fiu[ *p-'a' ]=nou(nod);
char c=*p;
p++;
return look_up(nod->fiu[ c-'a' ]);
}
int main()
{
freopen("trie.in", "r", stdin);
freopen("trie.out", "w", stdout);
trie=nou(NULL);
while(scanf("%d %s", &op, s)!=EOF)
{
p=s;
node *x=look_up(trie);
int delta=0;
if(op==0) delta=1;
if(op==1) delta=-1;
x->nr+=delta;
node *cop=x, *alt;
int ans3=0;
while(x->tata!=NULL)
{
if(x->nr_fii>0) ans3++;
x->nr_fii+=delta;
alt=x->tata;
if(x->nr_fii==0) delete x;
x=alt;
}
x=cop;
if(op==2)
printf("%d\n", x->nr);
if(op==3)
printf("%d\n", ans3);
}
return 0;
}