Pagini recente » Cod sursa (job #2488333) | Cod sursa (job #2284016) | Cod sursa (job #2677321) | Cod sursa (job #267340) | Cod sursa (job #1974413)
#include <cstdio>
using namespace std;
#define lit (*p - 'a')
class Trie{
public:
Trie* fii[26];
int nrf;
int cuv;
Trie(){
nrf = 0;
cuv = 0;
for(int i = 0; i < 26; ++i)
fii[i] = 0;
}
void insert(char *p) {
if(*p == 0) {
++cuv;
return;
}
if(fii[lit] == 0) {
nrf += 1;
fii[lit] = new Trie;
}
fii[lit]-> insert(p + 1);
}
void erase(char *p) {
if(*p == 0) {
cuv--;
return;
}
fii[lit]->erase(p + 1);
if(fii[lit]->nrf == 0 && fii[lit]->cuv == 0) {
delete fii[lit];
--nrf;
fii[lit] = 0;
}
}
int prefix(char *p) {
if(*p == 0 || fii[lit] == 0)
return 0;
return 1 + fii[lit]->prefix(p + 1);
}
int count(char *p) {
if(*p == 0)
return cuv;
if(fii[lit] == 0)
return 0;
return fii[lit]->count(p + 1);
}
}trie;
int main()
{
freopen("trie.in", "r", stdin);
freopen("trie.out", "w", stdout);
int t;
char w[30];
while(scanf("%d%s", &t, w) == 2) {
if(t == 0)
trie.insert(w);
else
if(t == 1)
trie.erase(w);
else
if(t == 2)
printf("%d\n", trie.count(w));
else
printf("%d\n", trie.prefix(w));
}
return 0;
}