Pagini recente » Cod sursa (job #1618197) | Cod sursa (job #99945) | Cod sursa (job #147749) | Cod sursa (job #2499703) | Cod sursa (job #946519)
Cod sursa(job #946519)
#include<cstdio>
#include<cstring>
using namespace std;
int Key,Letter,Pre;
char Word[30],*p;
struct Trie
{
int Count,Was;
Trie *Son[26];
Trie()
{
Count=Was=0;
memset(Son,0,sizeof(Son));
}
};
Trie *Root,*Aux;
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) // Insert
{
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) // Delete
{
for(Aux=Root,p=Word;*p;p++)
{
Letter=*p-'a';
Aux=Aux->Son[Letter];
Aux->Was--;
}
Aux->Count--;
continue;
}
if(Key==2) // Count
{
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) // Prefix
{
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;
}