Pagini recente » Cod sursa (job #3243019) | Cod sursa (job #18874) | Cod sursa (job #2943062) | Cod sursa (job #2478766) | Cod sursa (job #397207)
Cod sursa(job #397207)
#include <stdio.h>
#include <string.h>
struct trie{
int x, nr;
trie *fiu[26];
trie (){
x = nr = 0;
memset(fiu, 0, sizeof(fiu));
}
};
char s[50];
trie *T = new trie;
void ins(trie *nod, char *s){
if(*s == '\n' || *s == '\0'){
nod->x++;
return;
}
if(nod->fiu[(*s - 'a')] == 0){
nod->fiu[(*s - 'a')] = new trie;
nod->nr++;
}
ins(nod->fiu[(*s - 'a')], s + 1);
}
int del(trie *nod, char *s){
if(*s == '\n' || *s == '\0')
nod->x--;
else if(del(nod->fiu[*s - 'a'], s + 1)){
nod->nr--;
nod->fiu[*s-'a'] = 0;
}
if(nod->x == 0 && nod->nr == 0 && nod != T){
delete(nod);
return 1;
}
return 0;
}
void q1(trie *nod, char *s){
if(*s == '\n' || *s == '\0' || nod->fiu[*s-'a'] == 0){
printf("%d\n", nod->x);
return;
}
q1(nod->fiu[*s - 'a'], s + 1);
}
int pre(trie *nod, char *s){
if(*s == '\n' || nod->fiu[*s-'a'] == 0)
return 0;
return 1 + pre(nod->fiu[*s - 'a'], s + 1);
}
int main(){
freopen("trie.in", "r", stdin);
freopen("trie.out", "w", stdout);
fgets(s, 50, stdin);
while(!feof(stdin)){
switch(s[0]){
case '0' : ins(T, s + 2);break;
case '1' : del(T, s + 2);break;
case '2' : q1(T, s + 2);break;
case '3' : printf("%d\n", pre(T, s + 2));break;
}
fgets(s, 50, stdin);
}
return 0;
}