Pagini recente » Cod sursa (job #137861) | Cod sursa (job #899022) | Cod sursa (job #3151754) | Cod sursa (job #2858901) | Cod sursa (job #1351781)
#include<fstream>
using namespace std;
struct trie{
int fii;
int nr;
trie *f[26];
trie(){
nr=fii=0;
for(int i=0;i<26;i++){
f[i]=0;
}
}
};
trie *r=new trie();
int op;
char s[30];
ifstream fin("trie.in");
ofstream fout("trie.out");
void insertt(trie *nod,char *p){
if(*p == 0 ){
nod->nr++;
return;
}
if( *p && nod->f[*p-'a']==0 ){
nod->f[*p-'a'] = new trie;
nod->fii++;
}
insertt( nod->f[*p-'a'], p+1 );
}
int deletet(trie *&nod, char *p){
if(*p==0){
nod->nr--;
if( nod->fii == 0 && nod->nr == 0 && nod!=r ){
delete nod;
nod=0;
return 1;
}
return 0;
}
if( deletet( nod->f[*p-'a'], p+1 ) ){
nod->fii--;
if( nod->fii == 0 && nod->nr == 0 && nod!=r ){
delete nod;
nod=0;
return 1;
}
}
return 0;
}
int nrt(trie *nod, char *p){
if(*p==0)
return nod->nr;
if( nod->f[*p-'a']==0 )
return 0;
return nrt( nod->f[*p-'a'], p+1 );
}
int prefixt(trie *nod, char *p){
if(*p==0)
return 0;
if( nod->f[*p-'a'] == 0 )
return 0;
return 1+prefixt(nod->f[*p-'a'],p+1);
}
int main(){
while(fin>>op>>s){
if(op==0)
insertt(r,s);
if(op==1)
deletet(r,s);
if(op==2)
fout<<nrt(r,s)<<"\n";
if(op==3)
fout<<prefixt(r,s)<<"\n";
}
return 0;
}