Pagini recente » Cod sursa (job #1457085) | Cod sursa (job #1628315) | Cod sursa (job #2136588) | Rating Alina Dolniceanu (Alina97) | Cod sursa (job #1111169)
#include<cstdio>
#include<cstring>
using namespace std;
int op,n,i,l; char s[30];
struct trie
{
int count,was;
trie *fiu[30];
trie()
{
count=was=0;
memset(fiu,0,sizeof(fiu));
}
};
trie *root=new trie;
void a(trie *T, int poz)
{
if(poz==n) {T->count++; return;}
l=s[poz]-'a';
if(!T->fiu[l]) T->fiu[l]=new trie;
T->fiu[l]->was++;
a(T->fiu[l],poz+1);
}
void d(trie *T, int poz)
{
if(poz==n) {T->count--; return;}
l=s[poz]-'a';
T->fiu[l]->was--;
d(T->fiu[l],poz+1);
}
void c(trie *T,int poz)
{
if(poz==n) {printf("%d\n",T->count); return;}
l=s[poz]-'a';
if(!T->fiu[l] || !T->fiu[l]->was) {printf("0\n"); return;}
c(T->fiu[l],poz+1);
}
void p(trie *T,int poz)
{
if(poz==n) {printf("%d\n",n); return;}
l=s[poz]-'a';
if(!T->fiu[l] || !T->fiu[l]->was) {printf("%d\n",poz); return;}
p(T->fiu[l],poz+1);
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
while(scanf("%d %s",&op,s)+1)
{
n=strlen(s);
if(op==0) a(root,0);
else if(op==1) d(root,0);
else if(op==2) c(root,0);
else p(root,0);
}
return 0;
}