Pagini recente » Cod sursa (job #357332) | Rating Stoica Liviu (liviu0709) | Cod sursa (job #709180) | Cod sursa (job #368639) | Cod sursa (job #1427953)
#include<iostream>
#include<fstream>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<queue>
#include<map>
#include<set>
#include<algorithm>
#include<iomanip>
#include<bitset>
using namespace std;
struct trie {
trie *f[27];
int nrap, ver;
trie() {
nrap = 0;
ver = 0;
for(int i = 0; i < 27; ++i)
f[i] = 0;
}
};
char a[30];
int siz;
trie rad;
void add(trie *nod, int poz) {
nod->ver++;
if(poz == siz) {
nod->nrap++;
return;
}
if(!nod->f[a[poz]])
nod->f[a[poz]] = new trie;
add(nod->f[a[poz]], poz + 1);
}
void del(trie *nod, int poz) {
nod->ver--;
if(poz == siz) {
nod->nrap--;
return;
}
del(nod->f[a[poz]], poz + 1);
}
int nrap(trie *nod, int poz) {
if(!nod)
return 0;
if(poz == siz)
return nod->nrap;
return nrap(nod->f[a[poz]], poz + 1);
}
int pref(trie *nod, int poz) {
if(!nod || !nod->ver)
return 0;
if(poz == siz)
return poz;
int val = pref(nod->f[a[poz]], poz + 1);
if(!val)
return poz;
else
return val;
}
int main() {
freopen("trie.in", "r", stdin);
freopen("trie.out", "w", stdout);
int op;
while(cin >> op >> a) {
siz = strlen(a);
for(int i = 0; i < siz; ++i)
a[i] -= 'a';
if(op == 0)
add(&rad, 0);
if(op == 1)
del(&rad, 0);
if(op == 2)
cout << nrap(&rad, 0) << "\n";
if(op == 3)
cout << pref(&rad, 0) << "\n";
}
return 0;
}