Pagini recente » Cod sursa (job #1177741) | Cod sursa (job #647213) | Cod sursa (job #3143973) | Cod sursa (job #2527857) | Cod sursa (job #1439693)
#include<iostream>
#include<string>
using namespace std;
struct Node {
int final;
int intermediar;
Node* children[26];
};
Node* trie[26];
Node *new_node() {
Node *p = new Node();
p->intermediar = 0;
p->final = 0;
for (int i = 0; i < 26; i++) {
p->children[i] = 0;
}
return p;
}
void adauga(string x) {
if (trie[x[0] - 'a'] == 0) {
trie[x[0] - 'a'] = new_node();
}
Node *nod = trie[x[0] - 'a'];
if (x.size() == 1) {
nod->final++;
} else {
nod->intermediar++;
for (int i = 1; i < x.size() - 1; i++) {
if (nod->children[x[i] - 'a'] == 0) {
nod->children[x[i] - 'a'] = new_node();
}
nod = nod->children[x[i] - 'a'];
nod->intermediar++;
}
if (nod->children[x[x.size() - 1] - 'a'] == 0) {
nod->children[x[x.size() - 1] - 'a'] = new_node();
}
nod = nod->children[x[x.size() - 1] - 'a'];
nod->final++;
}
}
void sterge(string x) {
Node *nod = trie[x[0] - 'a'];
if (x.size() == 1) {
nod->final--;
} else {
nod->intermediar--;
for (int i = 1; i < x.size() - 1; i++) {
nod = nod->children[x[i] - 'a'];
nod->intermediar--;
}
nod = nod->children[x[x.size() - 1] - 'a'];
nod->final--;
}
}
int nr_aparitii(string x) {
if (trie[x[0] - 'a'] == 0) return 0;
Node *nod = trie[x[0] - 'a'];
for (int i = 1; i < x.size(); i++) {
nod = nod->children[x[i] - 'a'];
if (nod == 0) return 0;
}
return nod->final;
}
int prefix(string x) {
if (trie[x[0] - 'a'] == 0 || (trie[x[0] - 'a']->final == 0 && trie[x[0] - 'a']->intermediar == 0)) return 0;
int i = 0;
Node *nod = trie[x[0] - 'a'];
for (i = 1; i < x.size(); i++) {
nod = nod->children[x[i] - 'a'];
if (nod == 0 || (nod->final == 0 && nod->intermediar == 0)) break;
}
return i;
}
int main() {
ios::sync_with_stdio(false);
freopen("trie.in", "r", stdin);
freopen("trie.out", "w", stdout);
int x;
string s;
while (cin >> x) {
cin >> s;
if (x == 0) adauga(s);
if (x == 1) sterge(s);
if (x == 2) cout << nr_aparitii(s) << "\n";
if (x == 3) cout << prefix(s) << "\n";
}
return 0;
}