Pagini recente » Cod sursa (job #138329) | Cod sursa (job #244315)
Cod sursa(job #244315)
#include <stdio.h>
#include <string.h>
long t,l,q,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 (nod==0){printf("0\n");return;}
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",l-1);return;}
if (ch[0]==0){printf("%ld\n",l);return;}
long k=ch[0]-'a';
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)prefix(1,0,ch);
}while(1);
return 0;
}