Pagini recente » Cod sursa (job #2921605) | Cod sursa (job #568484) | Cod sursa (job #495363) | Arhiva Educationala | Cod sursa (job #2814474)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int op;
string s;
struct trie {
int nrCuv, fq;
trie* desc[27];
trie(){
nrCuv = 0;
fq = 0;
for(int i = 0; i <= 26; i++)
desc[i] = nullptr;
}
};
void add(trie* node, int idx){
node->fq++;
if(idx == s.length()){
node->nrCuv++;
return ;
}
int lit = s[idx] - 'a';
if(node->desc[lit] == nullptr)
node->desc[lit] = new trie;
add(node->desc[lit], idx + 1);
}
void del(trie* node, int idx){
node->fq--;
if(idx == s.length()){
node->nrCuv--;
return;
}
int lit = s[idx] - 'a';
del(node->desc[lit], idx + 1);
}
int nrAp(trie* node, int idx){
if(idx == s.length())
return node->nrCuv;
int lit = s[idx] - 'a';
if(node->desc[lit] == nullptr || node->desc[lit]->fq == 0)
return 0;
return nrAp(node->desc[lit], idx + 1);
}
int pref(trie* node, int idx){
if(idx == s.length())
return idx;
int lit = s[idx] - 'a';
if(node->desc[lit] == nullptr || node->desc[lit]->fq == 0)
return idx;
return pref(node->desc[lit], idx + 1);
}
int main()
{
trie* root = new trie;
while(fin >> op >> s){
if(op == 0)
add(root, 0);
else if(op == 1)
del(root, 0);
else if(op == 2)
fout << nrAp(root, 0) << "\n";
else
fout << pref(root, 0) << "\n";
}
return 0;
}