Pagini recente » Cod sursa (job #198289) | Cod sursa (job #6776) | Cod sursa (job #2076215) | Cod sursa (job #883676) | Cod sursa (job #2157360)
# include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie{
int fii,nr;
trie *nx[26];
trie(){
fii=nr=0;
for(int i=0;i<26;i++)
nx[i]=NULL;
}
}*tata;
char cuv[25];
int op;
void add(trie *nod,char *s){
if(*s==NULL){
nod->nr++;
return;
}
if(nod->nx[*s-'a']==NULL){
nod->nx[*s-'a']=new trie;
nod->fii++;
}
add(nod->nx[*s-'a'],s+1);
}
void sterge(trie *nod,char *s){
if(*s==NULL){
nod->nr--;
return;
}
sterge(nod->nx[*s-'a'],s+1);
if(nod->nx[*s-'a']->fii==0&&nod->nx[*s-'a']->nr==0){
delete nod->nx[*s-'a'];
nod->nx[*s-'a']=NULL;
nod->fii--;
}
}
int aparitii(trie *nod,char *s){
if(*s==NULL)
return nod->nr;
if(nod->nx[*s-'a']==NULL)
return 0;
return aparitii(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){
add(tata,cuv);
continue;
}
if(op==1){
sterge(tata,cuv);
continue;
}
if(op==2){
fout<<aparitii(tata,cuv)<<"\n";
continue;
}
fout<<prefix(tata,cuv)<<"\n";
}
return 0;
}