Pagini recente » Cod sursa (job #2626817) | Cod sursa (job #2417296) | Cod sursa (job #1315082) | Cod sursa (job #175161) | Cod sursa (job #1892517)
#include <bits/stdc++.h>
#define ch (*s-'a')
using namespace std;
struct Trie{
int cnt,nrfii;
Trie *v[26];
Trie(){
cnt=nrfii=0;
memset(v, 0, sizeof(v));
}
};
Trie *T=new Trie;
char l[30];
int lenght;
void Ins(Trie *Node, char *s){
if(*s==NULL) Node->cnt++;
else{
if(Node->v[ch]==0){
Node->v[ch]=new Trie;
Node->nrfii++;
}
Ins(Node->v[ch], s+1);
}
}
int Del(Trie *Node, char *s){
if(*s==NULL) Node->cnt--;
else{
if(Del(Node->v[ch], s+1)){
Node->nrfii--;
Node->v[ch]=0;
}
}
if(Node->cnt==0 && Node->nrfii==0 && Node!=T){
delete Node;
return 1;
}
return 0;
}
void Ap(Trie *Node, char *s){
if(*s==NULL) printf("%d\n",Node->cnt);
else{
if(Node->v[ch]==0) return;
Ap(Node->v[ch], s+1);
}
}
void Pref(Trie *Node, char *s){
if(*s==NULL or Node->v[ch]==0){
printf("%d\n",lenght);
lenght=0;
return;
}
lenght++;
Pref(Node->v[ch], s+1);
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
while(gets(l)){
if(l[0]=='0') Ins(T, l+2);
if(l[0]=='1') Del(T, l+2);
if(l[0]=='2') Ap(T, l+2);
if(l[0]=='3') Pref(T, l+2);
}
return 0;
}