Pagini recente » Cod sursa (job #2387643) | Cod sursa (job #2010681) | Cod sursa (job #2326419) | Cod sursa (job #2834040) | Cod sursa (job #1775210)
#include <iostream>
#include <fstream>
#include <map>
#include <string>
using namespace std;
map<string, int> h, prefix;
void word_add(string w) {
if (h.find(w) == h.end()) {
h[w] = 1;
} else {
h[w] = h[w]+1;
}
string s;
for (int i = 0; i < w.size(); i++) {
s+=w[i];
if (prefix.find(s) == prefix.end()) {
prefix[s] = 1;
} else {
prefix[s] = prefix[s] + 1;
}
}
}
void word_remove(string w) {
if (h.find(w) != h.end()) {
if (h[w] > 0) {
h[w]--;
}
}
string s;
for (int i = 0; i < w.size(); i++) {
s+=w[i];
if (prefix.find(s) != prefix.end()) {
if (prefix[s] > 0) {
prefix[s]--;
}
}
}
}
int word_count(string w) {
if (h.find(w) != h.end()) {
return h[w];
}
return 0;
}
int prefix_length(string w) {
string s = w;
while (s.size() > 0) {
if (prefix.find(s) != prefix.end() && prefix[s] > 0) {
return s.size();
}
s.erase(s.end()-1);
}
return 0;
}
int main() {
ifstream cin("trie.in");
ofstream cout("trie.out");
int op;
string w;
while (!cin.eof()) {
cin>>op>>w;
if (op == 0) {
word_add(w);
}
if (op == 1) {
word_remove(w);
}
if (op == 2) {
cout<<word_count(w)<<"\n";
}
if (op == 3) {
cout<<prefix_length(w)<<"\n";
}
}
return 0;
}