Pagini recente » Cod sursa (job #2911977) | Cod sursa (job #3168492)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie{
int k,n;
trie *f[26];
trie(){
k = n = 0;
memset(f,0,sizeof f);
}
};
trie *rad = new trie;
char ch[25];
void ins(trie *nod ,char *s){
if(*s == '\0'){
nod->k++;
return;
}
int v = *s - 'a';
if(nod->f[v] == 0){
nod->f[v] = new trie;
nod->n++;
}
ins(nod->f[v],s + 1);
}
int del(trie *nod, char *s){
int v = *s - 'a';
if(*s == '\0') nod->k--;
else if(del(nod->f[v],s + 1)){
nod->f[v] = 0;
nod->n--;
}
if(nod->k == 0 && nod->n == 0 && nod != rad){
delete nod;
return 1;
}
return 0;
}
int nrap(trie *nod, char *s){
if(*s == '\0') return nod->k;
int v = *s - 'a';
if(nod->f[v] != 0) return nrap(nod->f[v],s + 1);
return 0;
}
int pre(trie *nod, char *s, int k){
int v = *s - 'a';
if(*s == '\0' || nod->f[v] == 0)
return k;
return pre(nod->f[v],s + 1,k + 1);
}
int main()
{
while(fin.get(ch,25)){
fin.get();
if(ch[0] == '0') ins(rad,ch + 2);
else if(ch[0] == '1') del(rad,ch + 2);
else if(ch[0] == '2') fout << nrap(rad,ch + 2) << "\n";
else fout << pre(rad,ch + 2,0) << "\n";
}
return 0;
}