Pagini recente » Cod sursa (job #268860) | Cod sursa (job #973628) | Cod sursa (job #2794800) | Cod sursa (job #1115886) | Cod sursa (job #2307525)
#include<cstdio>
using namespace std;
struct Nod{
Nod *fii[26];
int nrp,nrc;
Nod(){
nrp=nrc=0;
for(int i=0;i<26;i++)
fii[i]=NULL;
}
};
Nod *r;
Nod *adauga(Nod *p,char *s){
if (p==NULL) p=new Nod;
p-> nrp++;
if (s[0]==0){
p-> nrc++;
return p;
}
p-> fii[s[0]-'a']=adauga(p-> fii[s[0]-'a'],s+1);
return p;
}
Nod *sterge(Nod *p,char *s){
if (s[0]==0){
p-> nrp--;
p-> nrc--;
if (p-> nrp==0){
delete p;
return NULL;
}
return p;
}
p-> fii[s[0]-'a']=sterge(p-> fii[s[0]-'a'],s+1);
p-> nrp--;
if (p-> nrp==0){
delete p;
return NULL;
}
return p;
}
int nr_ap(Nod *p,char *s){
if (p==NULL) return 0;
if (s[0]==0) return p-> nrc;
return nr_ap(p-> fii[s[0]-'a'],s+1);
}
int comun(Nod *p,char *s){
if (p==NULL) return -1;
if (s[0]==0) return 0;
return 1+comun(p-> fii[s[0]-'a'],s+1);
}
int main(){
freopen ("trie.in","r",stdin);
freopen ("trie.out","w",stdout);
int op;
char c[21];
while(scanf("%d",&op)!=EOF){
scanf (" ");
scanf ("%s",&c);
scanf ("\n");
if (op==0) r=adauga(r,c);
else
if (op==1) r=sterge(r,c);
else
if (op==2) printf ("%d\n",nr_ap(r,c));
else printf ("%d\n",comun(r,c));
}
return 0;
}