Pagini recente » Cod sursa (job #466197) | Cod sursa (job #1842063) | Cod sursa (job #290704) | Cod sursa (job #333720) | Cod sursa (job #3185611)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct Trie {
struct Node {
int ct, frecv;
Node *f[30];
};
Node *root = new Node();
void add(char *s, Node *poz) {
poz->ct++;
if (*s == '\0') {
poz->frecv++;
return;
}
if (poz->f[*s - 'a'] == NULL) {
poz->f[*s - 'a'] = new Node();
}
add(s + 1, poz->f[*s - 'a']);
}
void del(char *s, Node *poz) {
poz->ct--;
if (*s == '\0') {
poz->frecv--;
return;
}
del(s + 1, poz->f[*s - 'a']);
}
void Frecv(char *s, Node *poz) {
if (*s == '\0') {
fout << poz->frecv << '\n';
return;
}
Frecv(s + 1, poz->f[*s - 'a']);
}
int LongestPrefix(char *s, Node *poz) {
if (*s == '\0' || poz->f[*s - 'a'] == NULL || !poz->f[*s - 'a']->ct) {
return 0;
}
return LongestPrefix(s + 1, poz->f[*s - 'a']) + 1;
}
};
int op;
char s[30];
Trie t;
int main() {
while (fin >> op >> s) {
if (op == 0) {
t.add(s, t.root);
} else if (op == 1) {
t.del(s, t.root);
} else if (op == 2) {
t.Frecv(s, t.root);
} else if (op == 3) {
fout << t.LongestPrefix(s, t.root) << '\n';
}
}
return 0;
}