Pagini recente » pregatire69 | Cod sursa (job #343896) | Cod sursa (job #2704877) | drastik_challange_3 | Cod sursa (job #1247676)
#include <cstdio>
using namespace std;
FILE*f=fopen("trie.in","r");
FILE*h=fopen("trie.out","w");
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 ( s[0]==0 )return NULL;
if ( p==NULL )p=new nod;
p->nrp++;
if ( s[1]==0 )
p->nrc++;
p->fii[s[0]-'a']=adauga(p->fii[s[0]-'a'],s+1);
return p;
};
void sterge(nod *p,char *s){
if ( s[0]==0 )return;
p->nrp--;
if ( s[1]==0 )
p->nrc--;
sterge(p->fii[s[0]-'a'],s+1);
if ( p->nrp==0 );
delete p;
}
int apar(nod *p,char *s){
if ( s[1]==0 )
return p->nrc;
return apar(p->fii[s[0]-'a'],s+1);
}
int prefix(nod *p,char *s){
if ( p==NULL )return 0;
return 1+prefix(p->fii[s[0]-'a'],s+1);
}
char c[21];
int t;
int main(){
while ( fscanf(f,"%d %s\n",&t,&c)!=EOF ){
if ( t==0 )
r=adauga(r,c);
if ( t==1 )
sterge(r,c);
if ( t==2 )
fprintf(h,"%d\n",apar(r,c));
if ( t==3 )
fprintf(h,"%d\n",prefix(r,c));
}
return 0;
}