Pagini recente » Cod sursa (job #1431060) | Cod sursa (job #112674) | Cod sursa (job #3164597) | Cod sursa (job #646217) | Cod sursa (job #1471477)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct M {
int c,n;
struct M *f[26];
}N;
N *t=NULL;
N *Y() {
N *t=(N*)malloc(sizeof(N));
t->n=t->c=0,memset(t->f,0,sizeof(t->f));
return t;
}
void A(N *s,char *l) {
if(*l=='\n') {
s->c++;
return;
}
if(!s->f[*l-'a'])
s->f[*l-'a']=(N*)malloc(sizeof(N)),s->n++;
A(s->f[*l-'a'],l+1);
}
int D(N *s,char *l) {
if(*l=='\n')
s->c--;
else if(D(s->f[*l-'a'],l+1))
s->f[*l-'a']=0,s->n--;
if(!s->c&&!s->n&&s!=t) {
free(s);
return 1;
}
return 0;
}
int C(N *s,char *l) {
if(*l=='\n')
return s->c;
if(s->f[*l-'a'])
return C(s->f[*l-'a'],l+1);
return 0;
}
int E(N *s,char *l,int k) { return *l=='\n'||!s->f[*l-'a']?k:E(s->f[*l-'a'],l+1,k+1); }
int main() {
char l[32];
t=Y();
freopen("trie.in","r",stdin),freopen("trie.out","w",stdout),fgets(l,32,stdin);
while(!feof(stdin)) {
if(l[0]=='0')
A(t,l+2);
else if(l[0]=='1')
D(t,l+2);
else if(l[0]=='2')
printf("%d\n",C(t,l+2));
else if(l[0]=='3')
printf("%d\n",E(t,l+2,0));
fgets(l,32,stdin);
}
}