Pagini recente » Cod sursa (job #2238212) | Cod sursa (job #2566517) | Cod sursa (job #1938812) | Cod sursa (job #1946803) | Cod sursa (job #1214893)
#include <cstdio>
#include <cstring>
using namespace std;
struct Trie
{
int fii;
int ap;
Trie *v[26];
Trie()
{
ap=0;fii=0;
memset(v,0,sizeof(v));
}
};
Trie *T=new Trie;
void ins(char *s,Trie *nod)
{
if(*s == 0)
{
nod->ap++;
return;
}
int CH=*s-'a';
if(nod->v[CH]==NULL)
{
nod->v[CH]=new Trie;
nod->fii++;
}
ins(s+1,nod->v[CH]);
}
int del(char *s,Trie *nod)
{
int CH=*s-'a';
if(*s == 0 )
{
nod->ap--;
}
else
{
if(del(s+1,nod->v[CH])==1)
{
nod->v[CH] = NULL ;
nod->fii--;
}
}
if(nod->fii==0&&nod->ap==0&&nod!=T)
{
return 1;
}
return 0;
}
int caut(char *s,Trie *nod)
{
if(*s == 0)
{
return nod->ap;
}
int CH=*s-'a';
if(nod->v[CH]==NULL)
return 0;
return caut(s+1,nod->v[CH]);
}
int prefix(char* s,Trie *nod,int rasp)
{
int CH=*s-'a';
if(nod->v[CH]==NULL)
return rasp;
return prefix(s+1,nod->v[CH],rasp+1);
}
int main()
{
int op;
char cuv[40];
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
while(!feof(stdin))
{
scanf("%d",&op);
scanf("%s\n",&cuv);
if(op==0)
{
ins(cuv,T);
}
if(op==1)
{
del(cuv,T);
}
if(op==2)
{
printf("%d\n",caut(cuv,T));
}
if(op==3)
{
printf("%d\n",prefix(cuv,T,0));
}
}
return 0;
}