Pagini recente » Cod sursa (job #1751106) | Cod sursa (job #581858) | Cod sursa (job #1165179) | Cod sursa (job #1319923) | Cod sursa (job #2633598)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
struct Trie {
int cnt, children;
Trie * Children[26];
Trie () {
cnt = children = 0;
memset (Children, NULL, sizeof (Children));
}
};
Trie * Insert (Trie * node, char * s) {
if (node == NULL)
node = new Trie;
node -> children ++;
if (*s == '\0')
node -> cnt ++;
else
node -> Children[*s - 'a'] = Insert (node -> Children[*s - 'a'], s + 1);
return node;
}
Trie * Delete (Trie * node, char * s) {
node -> children --;
if (*s == '\0')
node -> cnt --;
else
node -> Children[*s - 'a'] = Delete (node -> Children[s[0]- 'a'], s + 1);
if (node -> children == 0)
node = NULL;
return node;
}
int Count (Trie * node, char * s) {
if (node == NULL)
return -1;
if (*s == '\0')
return node -> cnt;
return Count (node -> Children[*s - 'a'], s + 1);
}
int Preffix (Trie * node, char * s) {
if (node == NULL)
return -1;
if (*s == '\0')
return 0;
return 1 + Preffix (node -> Children[*s - 'a'], s + 1);
}
int main () {
Trie * T = new Trie;
short op;
char s[24];
while (fin >> op) {
fin >> s;
if (op == 0)
T = Insert (T, s);
if (op == 1)
T = Delete (T, s);
if (op == 2)
fout << Count (T, s) << '\n';
if (op == 3)
fout << Preffix (T, s) << '\n';
}
return 0;
}