Pagini recente » Cod sursa (job #255449) | Cod sursa (job #310) | Cod sursa (job #139282) | Cod sursa (job #244272) | Cod sursa (job #244267)
Cod sursa(job #244267)
#include <stdio.h>
#include <string.h>
long t,l,q,max,cuv[100002];char ch[32];
struct trie{int f[26];};
trie next[100002];
void add(int nod, char ch[32]){
if (ch[0]==0){cuv[nod]++;return;}
long k=ch[0]-'a';
if (next[nod].f[k]>0)add(next[nod].f[k],ch+1);
else {next[nod].f[k]=++q; add(q,ch+1);}
}
void del(int nod, char ch[32]){
if (ch[0]==0){cuv[nod]--;return;}
long k=ch[0]-'a';
del(next[nod].f[k],ch+1);
}
void count(int nod, char ch[32]){
if (ch[0]==0){printf("%ld\n",cuv[nod]);return;}
long k=ch[0]-'a';
count(next[nod].f[k],ch+1);
}
void prefix(int nod, int l, char ch[32]){
if (nod==0){printf("%ld\n",max-1);return;}
if (ch[0]==0){
for (int i=0;i<26;++i)if (next[nod].f[i])max=l;
if (cuv[nod]>0)max=l;
printf("%ld\n",max-1);
return;
}
long k=ch[0]-'a';
for (int i=0;i<26;++i)if (next[nod].f[i])max=l;
if (cuv[nod]>0)max=l;
prefix(next[nod].f[k],l+1,ch+1);
}
int main(){
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
do{
t=-1; scanf("%ld %s\n",&t,ch);
if (t==-1)break;
if (t==0)add(1,ch);
if (t==1)del(1,ch);
if (t==2)count(1,ch);
if (t==3){max=1;prefix(1,1,ch);}
}while(1);
return 0;
}