Pagini recente » Cod sursa (job #1864381) | Cod sursa (job #497747) | Cod sursa (job #2503548) | Cod sursa (job #637120) | Cod sursa (job #1802984)
# include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie{
int fii;
int inf;
trie *next[26];
trie (){
fii=0;
inf=0;
for(int i=0;i<26;i++)
next[i]=0;
}
};
char s[20];
int op;
trie *ns;
void insert(trie *p,char *s){
if(*s==0){
p->inf++;
return;
}
if(p->next[*s-'a']==0){
p->next[*s-'a']=new trie;
p->fii++;
}
insert(p->next[*s-'a'],s+1);
}
int sterge(trie *&p,char *s){
if(*s==0){
p->inf--;
if(p->inf==0&&p->fii==0&&p!=ns){
delete p;
p=0;
return 1;
}
return 0;
}
if(sterge(p->next[*s-'a'],s+1)){
p->fii--;
if(p->inf==0&&p->fii==0&&p!=ns){
delete p;
p=0;
return 1;
}
return 0;
}
}
int aparitii(trie *p,char *s){
if(*s==0)
return p->inf;
if(p->next[*s-'a']!=0)
return aparitii(p->next[*s-'a'],s+1);
else
return 0;
}
int prefix(trie *p,char *s,int nr){
if(*s==0)
return nr;
if(p->next[*s-'a']==0)
return nr;
else
return prefix(p->next[*s-'a'],s+1,nr+1);
}
int main () {
ns=new trie;
while(fin>>op>>s){
if(op==0)
insert(ns,s);
if(op==1)
sterge(ns,s);
if(op==2)
fout<<aparitii(ns,s)<<"\n";
if(op==3)
fout<<prefix(ns,s,0)<<"\n";
}
return 0;
}