Pagini recente » Cod sursa (job #628660) | Cod sursa (job #1476070) | Cod sursa (job #42168) | Cod sursa (job #1132183) | Cod sursa (job #2282928)
//
// Trie.cpp
//
//
// Created by Raoul Bocancea on 14/11/2018.
//
#include <fstream>
#include <cstring>
#define l *lit - 'a'
const std :: string programName = "trie";
std :: ifstream f(programName + ".in");
std :: ofstream g(programName + ".out");
class trie {
public:
int nc,nf;
trie *f[26];
trie() {
nc = nf = 0;
memset(f, 0, sizeof f);
}
void ins(char *lit) {
if(*lit) {
if(!f[l]) {
++nf;
f[l]=new trie;
}
f[l]->ins(lit + 1);
}
else
++nc;
}
bool del(char *lit) {
if(!*lit)
--nc;
else if(f[l]->del(lit + 1)) {
delete f[l];
f[l] = 0;
--nf;
}
if(nc or nf)
return false;
return true;
}
int nap(char *lit) {
if(*lit) {
if(f[l])
return f[l]->nap(lit + 1);
return 0;
}
return nc;
}
int pref(char *lit, int sz) {
if(!*lit)
return sz;
if(f[l])
return f[l]->pref(lit + 1, sz + 1);
return sz;
}
}t;
int main(void) {
int quest;
char s[21];
while(f >> quest >> s)
switch(quest) {
case 0:
t.ins(cuv);
break;
case 1:
t.del(cuv);
break;
case 2:
g << t.nap(s) << '\n';
break;
case 3:
g << t.pref(s, 0) << '\n';
break;
}
return 0x0;
}