Pagini recente » Cod sursa (job #2023430) | Cod sursa (job #1479688) | Cod sursa (job #2787428) | Cod sursa (job #597633) | Cod sursa (job #641238)
Cod sursa(job #641238)
#include<stdio.h>
#include<string>
FILE*f=fopen("trie.in","r");
FILE*g=fopen("trie.out","w");
int sol,l;
char v[30];
struct trie{
int nr,nrfii;
trie *son[27];
trie(){
nr = nrfii = 0;
for(int i=0;i<27;++i)
son[i]=0;
}
} *p=new trie;
void insert(trie *nod,char *q){
if(*q=='\n'){
++nod->nr;
return ;
}
if(nod->son[*q-'a'+1]==NULL){
nod->son[*q-'a'+1]=new trie;
++nod->nrfii;
}
insert(nod->son[*q-'a'+1],q+1);
}
int erase(trie *nod,char *q){
if(*q=='\n'){
--nod->nr;
}else if(nod->son[*q-'a'+1])
if(erase(nod->son[*q-'a'+1],q+1)){
nod->son[*q-'a'+1]=NULL;
--nod->nrfii;
}
if(!nod->nrfii&&!nod->nr&&nod!=p){
delete nod;
return 1;
}
return 0;
}
void appear(trie *nod,char *q){
if(*q=='\n'){
sol=nod->nr;
return;
}
if(nod->son[*q-'a'+1])
appear(nod->son[*q-'a'+1],q+1);
}
void pref(trie *nod,char *q){
++l;
if(*q>='a'&&*q<='z'&&nod->son[*q-'a'+1])
pref(nod->son[*q-'a'+1],q+1);
}
int main(){
while ( fgets(v+1,25,f)){
if(v[1]=='0')
insert(p,v+3);
else if(v[1]=='1')
erase(p,v+3);
else if(v[1]=='2'){
sol=0;
appear(p,v+3);
fprintf(g,"%d\n",sol);
}else{
l=-1;
pref(p,v+3);
fprintf(g,"%d\n",l);
}
}
fclose(g);
fclose(f);
return 0;
}