Pagini recente » Cod sursa (job #2989606) | Cod sursa (job #1803758) | Cod sursa (job #760262) | Cod sursa (job #239697) | Cod sursa (job #2662094)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
struct Trie {
int nr, sf;
Trie *fiu[30];
} *T;
void adaug(string s, int semn) {
Trie *aux = T;
aux -> nr += semn;
for (int i = 0; i < s.size(); ++i) {
int c = s[i] - 'a';
if (aux -> fiu[c] == NULL) {
Trie* auxf = new Trie;
auxf -> nr = 0;
aux -> fiu[c] = auxf;
}
aux = aux -> fiu[c];
aux -> nr += semn;
}
aux -> sf += semn;
}
int nr_aparitii(string s) {
Trie *aux = T;
for (int i = 0; i < s.size(); ++i) {
int c = s[i] - 'a';
if(aux -> fiu[c] == NULL) {
return 0;
}
aux = aux -> fiu[c];
}
return aux -> sf;
}
int cmlpc(string s) {
int ans = 0;
Trie *aux = T;
for (int i = 0; i < s.size() - 1; ++i) {
int c = s[i] - 'a';
if (aux -> fiu[c] == NULL)
return ans;
aux = aux -> fiu[c];
if (aux -> nr > 0)
ans = i + 1;
}
return ans;
}
int main() {
int type;
string s = "";
T = new Trie;
while (fin >> type >> s) {
switch(type) {
case 0: adaug(s, 1); break;
case 1: adaug(s, -1); break;
case 2: fout << nr_aparitii(s) << '\n'; break;
case 3: fout << cmlpc(s) << '\n'; break;
}
}
return 0;
}