Pagini recente » Cod sursa (job #319275) | Cod sursa (job #1798987) | Cod sursa (job #298532) | Cod sursa (job #1546932) | Cod sursa (job #1218996)
//#include<cstdio>
#include<cstring>
#include<fstream>
using namespace std;
int n;
char s[50];
struct trie{
int n;
int nf;
trie *v[27];
trie(){
n=nf=0;
for(int i=0;i<=26;i++){
v[i]=0;
}
}
} *t=new trie();
//FILE *f,*g;
ifstream fin("trie.in");
ofstream fout("trie.out");
void insertt(trie *nod, char *c){
if(*c==0){
nod->n++;
return;
}
if(nod->v[*c-'a']==0){
nod->v[*c-'a']=new trie();
nod->nf++;
}
insertt(nod->v[*c-'a'],c+1);
}
int deletet(trie *&nod, char *c){
if(*c==0){
nod->n--;
if(nod->n==0 && nod->nf==0 && t!=nod){
delete nod;
nod=0;
return 1;
}
return 0;
}
if(deletet(nod->v[*c-'a'],c+1)==1){
nod->nf--;
if(nod->n==0 && nod->nf==0 && t!=nod){
delete nod;
nod=0;
return 1;
}
return 0;
}
}
int nrt(trie *nod, char *c){
if(*c==0){
return nod->n;
}
if(nod->v[*c-'a']!=0){
return nrt(nod->v[*c-'a'],c+1);
}
return 0;
}
int prefixt(trie *nod, char *c, int q){
if(*c==0)
return q;
if(nod->v[*c-'a']!=0){
return prefixt(nod->v[*c-'a'],c+1,q+1);
}
return q;
}
int main(){
// f=fopen("trie.in","r");
//g=fopen("trie.out","w");
while(fin>>n>>s){
//fscanf(f,"%d %s",&n,s);
if(n==0){
insertt(t,s);
}
if(n==1){
deletet(t,s);
}
if(n==2){
//fprintf(g,"%d\n",nrt(t,s));
fout<<nrt(t,s)<<'\n';
}
if(n==3){
//fprintf(g,"%d\n",prefixt(t,s,0));
fout<<prefixt(t,s,0)<<'\n';
}
}
// fclose(f);
//fclose(g);
return 0;
}