Pagini recente » Cod sursa (job #2675951) | Cod sursa (job #2845935) | Cod sursa (job #2064848) | Cod sursa (job #2259246) | Cod sursa (job #1144681)
#include <cstdio>
using namespace std;
struct trie
{
trie *urm[26];
int cnt;
int pas;
trie()
{
for(int i=0;i<26;i++)urm[i]=0;
cnt=0;
pas=0;
}
};
trie *root,*pt,*aux;
char w[25],*pc;
int cod,i;
void add(),elim(),count(),lung();
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
root=new trie;
for(;scanf("%d",&cod)+1;)
{
scanf("%s",w);
if(cod==0)add();
if(cod==1)elim();
if(cod==2)count();
if(cod==3)lung();
}
return 0;
}
void add()
{
for(pt=root,pc=w;*pc;pc++)
{
i=*pc-'a';
if(!pt->urm[i])
{
aux=new trie;
pt->urm[i]=aux;
}
pt=pt->urm[i];
pt->pas++;
}
pt->cnt++;
}
void elim()
{
for(pt=root,pc=w;*pc;pc++)
{
i=*pc-'a';pt=pt->urm[i];pt->pas--;
}
pt->cnt--;//pt->pas--;
}
void count()
{
for(pt=root,pc=w;*pc;pc++)
{
i=*pc-'a';
if(!pt->urm[i])
{
printf("0\n");
return;
}
pt=pt->urm[i];
if(pt->pas==0)
{
printf("0\n");
return;
}
}
printf("%d\n",pt->cnt);
}
void lung()
{
int lg=0;
for(pt=root,pc=w;*pc;pc++)
{
i=*pc-'a';
if(!pt->urm[i])
{
printf("%d\n",lg);
return;
}
pt=pt->urm[i];
if(pt->pas==0)
{
printf("%d\n",lg);
return;
}
lg++;
}
printf("%d\n",lg);
}