Pagini recente » Cod sursa (job #2323309) | Cod sursa (job #1977177) | Cod sursa (job #401195) | Cod sursa (job #2152407) | Cod sursa (job #2585947)
#include <fstream>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
const int CHAR = 26;
class Trie{
public:
Trie *characters[CHAR];
int aparitie_cuvant;
int aparitie_litera;
Trie(){
aparitie_litera = aparitie_cuvant = 0;
for(int i = 0;i < CHAR;++i)
this->characters[i] = nullptr;
}
void insert(const string& key){
Trie *iterator = this;
for(int i = 0;i < key.size();++i){
if(iterator->characters[ key[i] - 'a' ] == nullptr)
iterator->characters[ key[i] - 'a' ] = new Trie();
iterator->characters[ key[i] - 'a']->aparitie_litera++;
iterator = iterator->characters[ key[i] - 'a'];
}
iterator->aparitie_cuvant++;
}
void deleteStr(const string& key){
Trie *iterator = this;
for(int i = 0;i < key.size();++i){
iterator->characters[ key[i] - 'a']->aparitie_litera--;
iterator = iterator->characters[ key[i] - 'a' ];
}
iterator->aparitie_cuvant--;
}
int aparitii(const string& key){
Trie *iterator = this;
for(int i = 0;i < key.size();++i){
if(iterator->characters[ key[i] - 'a'] == nullptr)
return 0;
iterator = iterator->characters[ key[i] - 'a' ];
}
return iterator->aparitie_cuvant;
}
int prefix(const string&key){
Trie *iterator = this;
int cnt = 0;
for(int i = 0;i < key.size();++i){
if(iterator->characters[ key[i] - 'a' ] != nullptr && iterator->characters[ key[i] - 'a' ]->aparitie_litera >= 1)
cnt++;
else
return cnt;
iterator = iterator->characters[ key[i] - 'a' ];
}
return cnt;
}
};
int nr;
string s;
int main(){
Trie *root = new Trie();
while(f >> nr >> s){
if(nr == 0)
root->insert(s);
else if(nr == 1)
root->deleteStr(s);
else if(nr == 2)
g << root->aparitii(s) << '\n';
else if(nr == 3)
g << root->prefix(s) << '\n';
}
return 0;
}