Pagini recente » Cod sursa (job #1557244) | Cod sursa (job #744883) | Cod sursa (job #1671) | Cod sursa (job #1875732) | Cod sursa (job #1815846)
# include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie{
int cnt;
int fii;
trie *next[26];
trie(){
cnt=fii=0;
for(int i=1;i<26;i++)
next[i]=0;
}
};
trie *sursa;
int r,op,nr;
char s[25];
void adauga(trie *nod,char *s){
if(*s==0)
nod->cnt++;
else{
if(nod->next[*s-'a']==NULL){
nod->next[*s-'a']=new trie;
nod->fii++;
}
adauga(nod->next[*s-'a'],s+1);
}
}
int sterge(trie *&nod,char *s){
if(*s==0){
nod->cnt--;
if(nod->cnt==0&&nod->fii==0&&nod!=sursa){
delete nod;
nod=0;
return 1;
}
return 0;
}
if(sterge(nod->next[*s-'a'],s+1)){
nod->fii--;
if(nod->cnt==0&&nod->fii==0&&nod!=sursa){
delete nod;
nod=0;
return 1;
}
}
return 0;
}
int nraparitii(trie *nod,char *s){
if(*s==0)
return nod->cnt;
if(nod->next[*s-'a']==NULL)
return 0;
return nraparitii(nod->next[*s-'a'],s+1);
}
int prefix(trie *nod,char *s){
nr++;
if(*s==0)
return nr-1;
if(nod->next[*s-'a']==NULL)
return nr-1;
return prefix(nod->next[*s-'a'],s+1);
}
int main () {
sursa=new trie;
while(fin>>op>>s){
if(op==0)
adauga(sursa,s);
if(op==1)
sterge(sursa,s);
if(op==2)
fout<<nraparitii(sursa,s)<<"\n";
if(op==3){
nr=0;
fout<<prefix(sursa,s)<<"\n";
}
}
return 0;
}