Cod sursa(job #244272)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 14 ianuarie 2009 20:24:13
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#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 (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 (ch[0]==0||nod==0){printf("%ld\n",l-1);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,1,ch);
    }while(1);
return 0;
}