Pagini recente » Cod sursa (job #721647) | Cod sursa (job #2944524) | Cod sursa (job #1495231) | Cod sursa (job #1413196) | Cod sursa (job #359342)
Cod sursa(job #359342)
#include <stdio.h>
#include <string.h>
struct trie {
int nr,nf;
trie *V[26];
trie(){
for (int i=0;i<=25;i++)
V[i] = NULL;
nr = nf = 0;
}
};
char S[100];
trie *t;
int i, o, k;
trie *p;
int del(trie *p, int i){
if( i == strlen(S) )
p->nr--;
else
if( del( p-> V[S[i]-'a'], i+1 )){
p-> V[S[i]-'a'] =0;
p-> nf --;
}
if( p->nr == 0 && p->nf == 0 && p!=t){
delete p; return 1;
}
return 0;
}
int main(){
FILE *f = fopen("trie.in", "r");
FILE *g = fopen("trie.out", "w");
t = new trie;
while (1) {
k++;
if (fscanf(f,"%d %s",&o, S)!=2)
break;
if (o == 0) {
p = t;
for (i=0; i<strlen(S); i++) {
if (p->V[S[i]-'a'] == NULL) {
p->V[S[i]-'a'] = new trie;
p->nf ++;
}
p = p->V[S[i]-'a'];
}
p->nr ++;
} else if (o == 2) {
for (p = t, i = 0; p != NULL && i<strlen(S); p = p->V[S[i]-'a'], i++);
if (p == NULL) {
fprintf(g,"%d\n",0);
} else {
fprintf(g,"%d\n",p->nr);
}
} else if (o == 3){
for (p = t, i = 0; p->V[S[i]-'a'] != NULL && i<strlen(S); p = p->V[S[i]-'a'], i++) ;
fprintf(g,"%d\n",i);
} else {
del(t,0);
}
}
fclose(g);
fclose(f);
delete t;
// printf("%d",k);
return 0;
}