Pagini recente » Cod sursa (job #637811) | Cod sursa (job #95195) | Cod sursa (job #1899935) | Cod sursa (job #1408753) | Cod sursa (job #1251572)
#include<cstdio>
#include<cstring>
using namespace std;
char s[22];
struct Nod{
int nrp,nrc;
Nod*fii[26];
Nod(){
nrp=nrc=0;
for(int i=0;i<26;i++)
fii[i]=NULL;
}
};
Nod*adauga(Nod*p,char*cuv){
if(p==NULL)
p=new Nod;
p->nrp++;
if(cuv[0]!=0)
p->fii[cuv[0]-'a']=adauga(p->fii[cuv[0]-'a'],cuv+1);
else
p->nrc++;
return p;
}
Nod *sterge(Nod*p,char*cuv){
p->nrp--;
if(cuv[0]!=0)
p->fii[cuv[0]-'a']=sterge(p->fii[cuv[0]-'a'],cuv+1);
else
p->nrc--;
if(p->nrp==0){
delete p;
p=NULL;
}
return p;
}
int aparitie(Nod *p, char *cuv)
{
if(p==NULL)
return 0;
if(cuv[0]==0)
return p->nrc;
return aparitie(p->fii[cuv[0]-'a'],cuv+1);
}
int lungpref(Nod *p,char *cuv)
{
if(cuv==0 )
return 0;
if(p==NULL)
return -1;
return (1+lungpref(p->fii[cuv[0]-'a'],cuv+1));
}
int main(){
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
int tip;
Nod *p;
p=new Nod;
while(scanf("%d ",&tip)>0){
gets(s);
if(tip==0)
adauga(p,&s[0]);
else if(tip==1)
sterge(p,&s[0]);
else if(tip==2)
printf("%d\n",aparitie(p,&s[0]));
else printf("%d\n",lungpref(p,&s[0]));
}
return 0;
}