Pagini recente » Cod sursa (job #2876606) | Cod sursa (job #2136551) | Cod sursa (job #764260) | Cod sursa (job #884812) | Cod sursa (job #1252008)
#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;
}
int ok;
void sterge(Nod *p,char *s){
if (s[0]==0){
p-> nrp--;
p-> nrc--;
if (p-> nrp==0){
delete p;
ok=1;
}
return ;
}
sterge(p-> fii[s[0]-'a'],s+1);
p-> nrp--;
if (p-> nrp==0){
delete p;
ok=1;
}
else
if (ok==1){
ok=0;
p-> fii[s[0]-'a']=NULL;
p-> nrc++;
}
}
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){
ok=0;
sterge(r,c);
}
else
if (op==2) printf ("%d\n",nr_ap(r,c));
else printf ("%d\n",comun(r,c));
}
return 0;
}