Pagini recente » Cod sursa (job #1047984) | Cod sursa (job #423068) | Cod sursa (job #667979) | Cod sursa (job #2055518) | Cod sursa (job #1921453)
#include <fstream>
#include <cstring>
using namespace std;
int op;
char sir[25];
ifstream f("trie.in");
ofstream g("trie.out");
struct nod{
int nrp,nrc;
nod* fii[26];
nod(){
nrp=nrc=0;
for(int i=0;i<26;++i)
fii[i]=NULL;
}
};
nod* t=new nod;
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){
p->nrp--;
if(s[0]==NULL) {
p->nrc--;
//return p;
}else
p->fii[s[0]-'a']=sterge(p->fii[s[0]-'a'],s+1);
if(p->nrp==0 && p->nrc == 0){
delete p;
p=NULL;
}
return p;
}
int nrapar(nod* p,char *s){
if(p==NULL)
return 0;
if(s[0]==0)
return p->nrc;
return nrapar(p->fii[s[0]-'a'],s+1);
}
int lungpref(nod* p,char *s){
if(p==NULL)
return 0;
return 1+lungpref(p->fii[s[0]-'a'],s+1);
}
int main()
{
while(f>>op){
f.get();
f.get(sir,21);
if(op==0) t=adauga(t,sir);
if(op==1) t=sterge(t,sir);
if(op==2) g<<nrapar(t,sir)<<'\n';
if(op==3) g<<lungpref(t,sir)-1<<'\n';
}
return 0;
}