Pagini recente » Cod sursa (job #271155) | Cod sursa (job #1840287) | Cod sursa (job #1252150) | Cod sursa (job #992676) | Cod sursa (job #954218)
Cod sursa(job #954218)
#include<cstdio>
#include<cstring>
using namespace std;
struct Trie
{
int Was,Count;
Trie *Son[26];
Trie()
{
memset(Son,0,sizeof(Son));
Count=Was=0;
}
};
Trie *Root,*Aux;
int Key,Letter,Pre;
char Word[25],*p;
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
Root=new Trie;
while(scanf("%d %s",&Key,Word)+1)
{
if(Key==0)
{
for(Aux=Root,p=Word;*p;p++)
{
Letter=*p-'a';
if(!Aux->Son[Letter]) Aux->Son[Letter]=new Trie;
Aux=Aux->Son[Letter];
Aux->Was++;
}
Aux->Count++;
continue;
}
if(Key==1)
{
for(Aux=Root,p=Word;*p;p++)
{
Letter=*p-'a';
Aux=Aux->Son[Letter];
Aux->Was--;
}
Aux->Count--;
continue;
}
if(Key==2)
{
for(Aux=Root,p=Word;*p;p++)
{
Letter=*p-'a';
Aux=Aux->Son[Letter];
if(!Aux || !Aux->Was) break;
}
if(!Aux) printf("0\n");
else printf("%d\n",Aux->Count);
continue;
}
if(Key==3)
{
for(Pre=0,Aux=Root,p=Word;*p;p++)
{
Letter=*p-'a';
Aux=Aux->Son[Letter];
if(!Aux || !Aux->Was) break;
Pre++;
}
printf("%d\n",Pre);
}
}
return 0;
}