Pagini recente » Cod sursa (job #226495) | Cod sursa (job #1762223) | Cod sursa (job #1716451) | Cod sursa (job #2493228) | Cod sursa (job #3210009)
#include <bits/stdc++.h>
using namespace std;
struct Node {
int apar=0,cuv=0;
vector<Node *> fii;
Node() {
fii.resize(26,nullptr);
}
};
struct Trie {
Node * root = nullptr;
Node * insert_(Node * node, const char * s) {
if(node == nullptr)
node = new Node;
(* node).apar++;
if(s[0]=='\0')
(* node).cuv++;
else
(* node).fii[s[0]-'a'] = insert_(node->fii[s[0]-'a'], s+1);
return node;
}
Node * delete_(Node * node, const char * s) {
if(node == nullptr)
return node;
(* node).apar--;
if(s[0]=='\0')
(* node).cuv++;
else
(* node).fii[s[0]-'a'] = delete_(node->fii[s[0]-'a'], s+1);
return node;
}
int query_apar(Node * node, const char * s){
if(node == nullptr)
return 0;
if(s[0]=='\0')
return (* node).cuv;
else
return query_apar(node->fii[s[0]-'a'], s+1);
}
int query_pref(Node * node, const char * s){
if(node == nullptr)
return 0;
if(s[0]=='\0' || (* node).fii[s[0]-'a'] == nullptr)
return 0;
else
return (query_pref(node->fii[s[0]-'a'], s+1)+1);
}
};
Trie trie;
string cuv;
int op;
int main() {
while(cin>>op) {
cin>>cuv;
if(op==0) {
trie.root = trie.insert_(trie.root, cuv.c_str());
} else if(op==1) {
trie.root = trie.delete_(trie.root, cuv.c_str());
} else if(op==2) {
cout<<trie.query_apar(trie.root, cuv.c_str())<<"\n";
} else if(op==3) {
cout<<trie.query_apar(trie.root, cuv.c_str())<<"\n";
}
}
return 0;
}