Pagini recente » Cod sursa (job #1593003) | Cod sursa (job #1289555) | Cod sursa (job #1017868) | Cod sursa (job #447636) | Cod sursa (job #3210239)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
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) {
cout<<"insert "<<s<<"\n";
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) {
cout<<"delete "<<s<<"\n";
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){
cout<<"apar "<<s<<"\n";
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){
cout<<"pref "<<s<<"\n";
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(fin>>op) {
fin>>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) {
fout<<trie.query_apar(trie.root, cuv.c_str())<<"\n";
} else if(op==3) {
fout<<trie.query_pref(trie.root, cuv.c_str())<<"\n";
}
}
return 0;
}