Pagini recente » Cod sursa (job #2237667) | Cod sursa (job #2948331) | Cod sursa (job #137049) | Cod sursa (job #2577043) | Cod sursa (job #2325871)
# include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie{
int fii,aparitii;
trie *nx[26];
trie(){
fii=aparitii=0;
for(int i=0;i<26;i++)
nx[i]=NULL;
}
} *tata;
char cuv[25];
int op;
void adauga(trie *nod,char *s){
if(*s==NULL){
nod->aparitii++;
return;
}
if(nod->nx[*s-'a']==NULL){
nod->nx[*s-'a']=new trie;
nod->fii++;
}
adauga(nod->nx[*s-'a'],s+1);
}
void sterge(trie *nod,char *s){
if(*s==NULL){
nod->aparitii--;
return;
}
sterge(nod->nx[*s-'a'],s+1);
if(nod->nx[*s-'a']->fii==0&&nod->nx[*s-'a']->aparitii==0){
delete nod->nx[*s-'a'];
nod->nx[*s-'a']=NULL;
nod->fii--;
}
}
int numar(trie *nod,char *s){
if(*s==NULL)
return nod->aparitii;
if(nod->nx[*s-'a']==NULL)
return 0;
return numar(nod->nx[*s-'a'],s+1);
}
int prefix(trie *nod, char *s){
if(*s==NULL)
return 0;
if(nod->nx[*s-'a']==NULL)
return 0;
return prefix(nod->nx[*s-'a'],s+1)+1;
}
int main () {
tata=new trie;
while(fin>>op>>cuv){
if(op==0){
adauga(tata,cuv);
continue;
}
if(op==1){
sterge(tata,cuv);
continue;
}
if(op==2){
fout<<numar(tata,cuv)<<"\n";
continue;
}
fout<<prefix(tata,cuv)<<"\n";
}
return 0;
}