Pagini recente » Cod sursa (job #1817908) | Cod sursa (job #206200) | Cod sursa (job #2447808) | Cod sursa (job #344223) | Cod sursa (job #2410803)
#include <cstdio>
#include <cstring>
#include <string.h>
using namespace std;
const int NR = 26;
struct trie{
trie *fii[NR];
int cntp=0;
int cnt=0;
trie(){
for(int i=0;i<NR;++i)
fii[i]=0;
cnt=0;
}
};
trie *root = new trie();
void mod(trie *nod, char *s, int val){
if(*s==0){
nod->cnt+=val;
nod->cntp+=val;
return;
}
nod->cntp+=val;
if(!nod->fii[s[0]-'a'])
nod->fii[s[0]-'a']= new trie();
mod(nod->fii[s[0]-'a'],s+1,val);
}
int find_w(trie *nod,char *s){
if(*s==0)
return nod->cnt;
if(!nod->fii[s[0]-'a'])
return 0;
return find_w(nod->fii[s[0]-'a'],s+1);
}
int find_p(trie *nod,char *s,int l){
if(nod->cntp==0)
return l-1;
if(*s==0)
return l;
if(!nod->fii[s[0]-'a'])
return l;
return find_p(nod->fii[s[0]-'a'],s+1,l+1);
}
int main(){
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
int p;
char s[22];
while(scanf("%d ",&p)!=EOF){
scanf("%s",s);
if(p==0)
mod(root,s,1);
if(p==1)
mod(root,s,-1);
if(p==2)
printf("%d\n",find_w(root,s));
if(p==3)
printf("%d\n",find_p(root,s,0));
}
return 0;
}