Cod sursa(job #714208)

Utilizator auRSTARHreapca Aurelian auRSTAR Data 15 martie 2012 16:00:20
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<cstdio>
void read(),solve();
char A[23],*p;
int t,i;
struct trie{
	int ok,cnt;
	trie *fii[26];
	trie()
	{
		for(int i=0;i<26;i++)fii[i]=0;
		ok=0;
		cnt=0;
	}
};
trie *root,*aux;
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("trie.in","r",stdin);
	freopen("trie.out","w",stdout);
}
void solve()
{
	root=new trie;
	for(;scanf("%d %s",&t,A)+1;)
	{
		if(!t)
		{
			for(aux=root,p=A;*p;p++)
			{
				i=*p-'a';
				if(!aux->fii[i])
					aux->fii[i]=new trie;
				aux=aux->fii[i];aux->cnt++;
			}
			aux->ok++;
			continue;
		}
		if(t==1)
		{
			for(aux=root,p=A;*p;p++)
			{
				i=*p-'a';
				aux=aux->fii[i];
				aux->cnt--;
			}
			aux->ok--;
			continue;
		}
		if(t==2)
		{
			for(aux=root,p=A;*p;p++)
			{
				i=*p-'a';
				aux=aux->fii[i];
				if(!aux)break;
			}
			aux?printf("%d\n",aux->ok):printf("0\n");
			continue;
		}
		if(t==3)
		{
			int nr=0;
			for(aux=root,p=A;*p;p++)
			{
				i=*p-'a';
				aux=aux->fii[i];
				if(!aux||!aux->cnt)break;
				nr++;
			}
			printf("%d\n",nr);
		}
	}
}