Pagini recente » Cod sursa (job #868100) | Cod sursa (job #2054526) | Cod sursa (job #2856099) | Cod sursa (job #593169) | Cod sursa (job #3351783)
#include <bits/stdc++.h>
using namespace std;
struct Nod{
int pre,en;
Nod *next[26];
Nod(){
pre=en=0;
memset(next, 0, sizeof(next));
}
};
Nod *t=new Nod;
void ins(Nod *i, char *c){
if (*c=='\n'){
i->pre++;
return;
}
if (i->next[*c-'a']==0){
i->next[*c-'a']=new Nod;
i->en++;
}
ins(i->next[*c-'a'], c+1);
}
int eras(Nod *i, char *c){
if (*c=='\n')
i->pre--;
else if (eras(i->next[*c-'a'], c+1)){
i->next[*c-'a']=0;
i->en--;
}
if (i->pre==0 && i->en==0 && i!=t){
delete i;
return 1;
}
return 0;
}
int que(Nod *i, char *c){
if (*c=='\n')
return i->pre;
if (i->next[*c-'a'])
return que(i->next[*c-'a'], c+1);
return 0;
}
int pre(Nod *i, char *c, int k){
if (*c=='\n' || i->next[*c-'a']==0)
return k;
return pre(i->next[*c-'a'], c+1, k+1);
}
int main()
{
ifstream cin ("trie.in");
ofstream cout ("trie.out");
char v[32];
fgets(v, 32, stdin);
while (!feof(stdin)){
if (v[0]=='0'){
ins(t, v+2);
break;
}else if (v[0]=='1'){
eras(t, v+2);
break;
}else if (v[0]=='2'){
cout << que(t, v+2) << '\n';
break;
}else{
cout << pre(t, v+2, 0) << '\n';
break;
}
fgets(v, 32, stdin);
}
return 0;
}