Pagini recente » Cod sursa (job #1970953) | Cod sursa (job #1800774) | Cod sursa (job #2609382) | Cod sursa (job #699380) | Cod sursa (job #3144198)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct nod {
int nrAp, pr;
nod *next[27];
nod() {
pr = nrAp = 0;
memset(next, 0, sizeof(next));
}
} *T;
char s[25];
int n;
void adaug() {
nod *q = T;
q->pr++;
for (int i = 0; i < n; ++i) {
if (q->next[s[i]] == 0) {
q->next[s[i]] = new nod;
}
q = q->next[s[i]];
q->pr++;
}
q->nrAp++;
}
void del() {
nod *q = T;
q->pr--;
for (int i = 0; i < n; ++i) {
q = q->next[s[i]];
q->pr--;
}
q->nrAp--;
}
int prefix() {
nod *q = T;
for (int i = 0; i < n; ++i) {
if (q->next[s[i]] == 0 || q->next[s[i]]->pr == 0) {
return i;
}
q = q->next[s[i]];
}
return n;
}
int cuv() {
nod *q = T;
for (int i = 0; i < n; ++i) {
if (q->next[s[i]] == 0) {
return 0;
}
q = q->next[s[i]];
}
return q->nrAp;
}
int main() {
T = new nod;
int op;
while (fin >> op) {
fin.get();
fin.getline(s, 25);
n = strlen(s);
for (int i = 0; i < n; ++i) {
s[i] -= 'a';
}
if (op == 0) {
adaug();
} else if (op == 1) {
del();
} else if (op == 2) {
fout << cuv() << '\n';
} else {
fout << prefix() << '\n';
}
}
return 0;
}