Pagini recente » Cod sursa (job #1656716) | Cod sursa (job #1183114) | Cod sursa (job #3209431) | Cod sursa (job #1697860) | Cod sursa (job #2154221)
#include <bits/stdc++.h>
using namespace std;
struct nod{
int nr,val;
nod *urm[26];
nod() {
nr=0;
val=0;
memset(urm,0,sizeof(urm));
}
};
char s[25];
nod *o = new nod;
void add(){
int i,n;
nod *x=o;
n=strlen(s);
for (i=0;i<n;i++){
if (x->urm[s[i]-'a']==0){
x->urm[s[i]-'a']= new nod;
}
x=x->urm[s[i]-'a'];
x->nr++;
}
x->val++;
}
void del(){
int i,n;
nod *x=o;
n=strlen(s);
for (i=0;i<n;i++){
x=x->urm[s[i]-'a'];
x->nr--;
}
x->val--;
}
void apar(){
int i,n;
nod *x=o;
n=strlen(s);
for (i=0;i<n;i++){
if (x->urm[s[i]-'a']==NULL){
x->urm[s[i]-'a']= new nod;
}
x=x->urm[s[i]-'a'];
}
printf("%d\n",x->val);
}
void pref(){
int i,n;
nod *x=o;
n=strlen(s);
for (i=0;i<n;i++){
if (x->urm[s[i]-'a']==NULL){
x->urm[s[i]-'a']= new nod;
}
x=x->urm[s[i]-'a'];
if (x->nr<2) break;
}
printf("%d\n",i+1);
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
int t;
while (scanf("%d %s",&t,s)!=EOF){
if (t==0) add();
else if (t==1) del();
else if (t==2) apar();
else pref();
}
return 0;
}