Pagini recente » Cod sursa (job #1719314) | Cod sursa (job #543345) | Cod sursa (job #1238897) | Cod sursa (job #934725) | Cod sursa (job #315050)
Cod sursa(job #315050)
#include <stdio.h>
class arb{
private:
arb(){
nrc=nrp=0;
for(int i=0;i<26;i++)
fiu[i]=0;
}
public:
int nrc;
int nrp;
arb *fiu[26];
void add(arb *p, char *s);
arb *rm(arb *p, char *s);
int apar(arb *p, char *s);
int prefix(arb *p, char *s);
};
arb::void add(arb *p, char *s){
p->nrp++;
if (!*s){
p->nrc++;
return;
}
int ascii;
ascii=*s-'a';
if(!p->fiu[ascii])
p->fiu[ascii]=new arb;
arb::add(p->fiu[ascii],s+1);
}
arb::arb* rm(arb *p, char *s){
p->nrp--;
if(!*s){
p->nrc--;
return;
}
else
p->fiu[*s-'a']=arb::rm(p->fiu[*s-'a'],s+1);
if(!p->nrp){
delete p;
p=0;
}
return p;
}
arb::int apar(arb *p, char *s){
if (!*s){
return p->nrc;
}
if (!p->fiu[*s-'a'])
return 0;
return arb::apar(p->fiu[*s-'a'],s+1);
}
arb::int prefix(arb *p, char *s){
if (!*s)
return 0;
if (!p->fiu[*s-'a'])
return 0;
return 1 + arb::prefix ( p->fiu[*s-'a'], s+1 );
}
int main(){
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
int x;
char s[100];
arb *trie=0;
while (scanf("%d %s\n",&x,&s)!=EOF){
if(trie==0)
trie=new arb;
if(x==0)
arb::add(trie,s);
if(x==1)
arb::rm(trie,s);
if(x==2)
printf("%d\n",arb::apar(trie,s));
if(x==3)
printf("%d\n",arb::prefix(trie,s));
}
return 0;
}