Pagini recente » Cod sursa (job #699821) | Cod sursa (job #2502005) | Cod sursa (job #2959793) | Cod sursa (job #2226148) | Cod sursa (job #2402573)
#define DM 21
#define DN 31
#include <fstream>
using namespace std;
ifstream fi ("trie.in");
ofstream fo ("trie.out");
char cuv[DM];
int q;
struct trie {
int ending, nrSons;
trie * sons[DN];
trie() {
ending = nrSons = 0;
for (int i = 0; i < DN; ++i)
sons[i] = 0;
}
void display() {
fo << "nrSons : " << nrSons << " - ending : " << ending << '\n';
}
};
trie * root = new trie();
void addWord(char * c, trie * crt) {
if (*c == '\0') {
++(crt->ending);
return;
}
++(crt->nrSons);
int idx = *c - 'a';
if (crt->sons[idx] == 0)
crt->sons[idx] = new trie();
addWord(c + 1, crt->sons[idx]);
}
void deleteWord(char * c, trie * crt) {
if (*c == '\0') {
--(crt->ending);
if (!(crt->ending) && !(crt->nrSons))
delete crt;
return;
}
int idx = *c - 'a';
deleteWord(c + 1, crt->sons[idx]);
--(crt->nrSons);
if (!(crt->ending) && !(crt->nrSons))
delete crt;
}
int findWord(char * c, trie * crt) {
if (*c == '\0')
return (crt->ending);
int idx = *c - 'a';
if (crt->sons[idx] == 0)
return 0;
return findWord(c + 1, crt->sons[idx]);
}
int maxPrefix(char * c, trie * crt) {
if (*c == '\0')
return 0;
int idx = *c - 'a';
if (crt->sons[idx] == 0)
return 0;
return 1 + maxPrefix(c + 1, crt->sons[idx]);
}
void parcurge(trie * crt) {
crt->display();
for (int i = 0; i < DN; ++i)
if (crt->sons[i] != 0) {
char aux = 'a';
aux += i;
fo << "entering " << aux << '\n';
parcurge(crt->sons[i]);
}
}
int main() {
while (fi >> q) {
fi >> cuv;
switch (q) {//ba, jur ca nu-s gay, vreau numai sa vad cum merge switch
case 0:
addWord(cuv, root);
break;
case 1:
// parcurge(root);
deleteWord(cuv, root);
break;
case 2:
fo << findWord(cuv, root) << '\n';
break;
case 3:
fo << maxPrefix(cuv, root) << '\n';
break;
default:
fo << "ba ce pula mea";
}
}
// parcurge(root);
}