Pagini recente » Cod sursa (job #2401935) | Cod sursa (job #1221568) | Cod sursa (job #720201) | Cod sursa (job #1362583) | Cod sursa (job #1146164)
#include <iostream>
#include <cstdio>
#include <cstring>
#define Drum *Lit-'a'
using namespace std;
char C[50];
int Op;
class trie
{
public:
int Nc, Nf;
trie *F[30];
trie()
{
Nc=Nf=0;
memset(F,0,sizeof(F));
}
void Inserare(char *Lit)
{
if(*Lit)
{
if(!F[Drum])
{
Nf++;
F[Drum]=new trie;
}
F[Drum]->Inserare(Lit+1);
}
else
Nc++;
}
int Stergere(char *Lit)
{
if(!*Lit)
Nc--;
else
if(F[Drum]->Stergere(Lit+1))
{
delete F[Drum];
F[Drum]=0;
--Nf;
}
if(Nc || Nf)
return 0;
return 1;
}
int Aparitii(char *Lit)
{
if(!*Lit)
return Nc;
else
{
if(F[Drum])
return F[Drum]->Aparitii(Lit+1);
else
return 0;
}
}
int Lungime_Prefix(char *Lit, int Size)
{
if(!*Lit)
return Size;
if(F[Drum])
return F[Drum]->Lungime_Prefix(Lit+1,Size+1);
return Size;
}
}Rad;
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
while(!feof(stdin))
{
scanf("%d %s\n",&Op,C);
switch(Op)
{
case 0:
Rad.Inserare(C);
break;
case 1:
Rad.Stergere(C);
break;
case 2:
printf("%d\n",Rad.Aparitii(C));
break;
case 3:
printf("%d\n",Rad.Lungime_Prefix(C,0));
break;
}
}
return 0;
}