Pagini recente » Cod sursa (job #910483) | Cod sursa (job #289521) | Cod sursa (job #2598807) | Cod sursa (job #967634) | Cod sursa (job #3209470)
#include <iostream>
#include <string>
using namespace std;
int tip;
string s;
struct trie {
trie *nxt[30];
int val, sz;
} *root;
void nou(trie *nod) {
nod->val = 0;
for(int i=1; i<=26; i++)
nod->nxt[i] = nullptr;
}
void add(trie *root, int pos) {
if(pos == s.size()) {
root->val++;
return;
}
if(root->nxt[s[pos]-'a'+1] == nullptr) {
root->nxt[s[pos]-'a'+1] = new trie;
nou(root->nxt[s[pos]-'a'+1]);
}
add(root->nxt[s[pos]-'a'+1], pos+1);
root->sz++;
}
void del(trie *root, int pos) {
if(pos == s.size()) {
root->val--;
return;
}
root->sz--;
del(root->nxt[s[pos]-'a'+1], pos+1);
if(root->nxt[s[pos]-'a'+1]->sz == 0)
root->nxt[s[pos]-'a'+1] = nullptr;
}
int queryap(trie *root, int pos) {
if(pos == s.size())
return root->val;
else {
if(root->nxt[s[pos]-'a'+1] == nullptr)
return 0;
return queryap(root->nxt[s[pos]-'a'+1], pos+1);
}
}
int querylg(trie *root, int pos) {
if(pos == s.size())
return pos;
if(root->nxt[s[pos]-'a'+1] == nullptr)
return pos;
else
return querylg(root->nxt[s[pos]-'a'+1], pos+1);
}
int main()
{
freopen("trie.in", "r", stdin);
freopen("trie.out", "w", stdout);
cin.tie(nullptr)->sync_with_stdio(0);
root = new trie;
nou(root);
while(cin >> tip) {
cin >> s;
if(tip == 0)
add(root, 0);
else if(tip == 1)
del(root, 0);
else if(tip == 2)
cout << queryap(root, 0) << '\n';
else
cout << querylg(root, 0) << '\n';
}
return 0;
}