Pagini recente » Cod sursa (job #864487) | Cod sursa (job #898406) | Cod sursa (job #2441305) | Cod sursa (job #2293797) | Cod sursa (job #2738369)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct Trie
{
Trie *next[30] = {NULL};
int cnt = 0, cntEnd = 0;
};
int M, op;
char s[25];
Trie *root = new Trie;
void Insert(Trie *currNode, char *s)
{
currNode->cnt++;
if (s[0] == 0) {
currNode->cntEnd++;
return;
}
int letter = s[0] - 'a';
if (currNode->next[letter] == NULL) {
Trie *next = new Trie;
currNode->next[letter] = next;
}
Insert(currNode->next[letter], s + 1);
}
void Delete(Trie *currNode, char *s)
{
currNode->cnt--;
if (s[0] == 0) {
currNode->cntEnd--;
return;
}
int letter = s[0] - 'a';
Delete(currNode->next[letter], s + 1);
if (currNode->next[letter]->cnt == 0) {
Trie *node = currNode->next[letter];
delete node;
currNode->next[letter] = NULL;
}
}
int Count(Trie *currNode, char *s)
{
if (s[0] == 0) {
return currNode->cntEnd;
}
int letter = s[0] - 'a';
return Count(currNode->next[letter], s + 1);
}
string Ans;
void Prefix(Trie *currNode, char *s)
{
if (s[0] == 0) {
return;
}
int letter = s[0] - 'a';
if (currNode->next[letter] != NULL) {
Ans += s[0];
Prefix(currNode->next[letter], s + 1);
}
}
int main()
{
while (fin >> op >> s) {
if (op == 0) {
Insert(root, s);
}
else if (op == 1) {
Delete(root, s);
}
else if (op == 2) {
fout << Count(root, s) << "\n";
}
else {
Ans.clear();
Prefix(root, s);
fout << Ans.size() << "\n";
}
}
return 0;
}