Pagini recente » Cod sursa (job #1406152) | Cod sursa (job #485339) | Cod sursa (job #3226406) | Cod sursa (job #2915388) | Cod sursa (job #1427956)
#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;
ifstream in("trie.in");
ofstream out("trie.out");
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() {
int op;
while(in >> 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)
out << nrap(&rad, 0) << "\n";
if(op == 3)
out << pref(&rad, 0) << "\n";
}
return 0;
}