Pagini recente » Cod sursa (job #1102106) | Cod sursa (job #2204932) | Cod sursa (job #1563362) | Cod sursa (job #1815264) | Cod sursa (job #2282901)
//
// 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 nr_cuv, nr_x;
Trie* f[26];
Trie() {
nr_cuv = nr_x = 0;
memset(f, 0, sizeof f);
}
void insert(char* lit) {
if (*lit) {
if (!f[l]) {
++nr_x;
f[l] = new Trie;
}
f[l]->insert(lit + 1);
}
else
++nr_cuv;
}
bool del(char* lit) {
if (*lit)
--nr_cuv;
else if (f[l]->del(lit + 1)) {
delete f[l];
f[l] = 0;
--nr_x;
}
if (nr_cuv or nr_x)
return false;
return true;
}
int nr_aparitii(char* lit) {
if (*lit) {
if (f[l])
return f[l]->nr_aparitii(lit + 1);
return 0;
}
return nr_cuv;
}
int dimensiune_prefix(char* lit, int size) {
if (!*lit)
return size;
if (f[l])
return f[l]->dimensiune_prefix(lit + 1, size + 1);
return size;
}
}t;
int main(void) {
int quest;
char s[21];
while (f >> quest >> s)
switch (quest) {
case 0:
t.insert(s);
break;
case 1:
t.del(s);
break;
case 2:
g << t.nr_aparitii(s) << '\n';
break;
case 3:
g << t.dimensiune_prefix(s, 0) << '\n';
break;
}
return 0x0;
}