Pagini recente » Cod sursa (job #537854) | Cod sursa (job #2869909) | Cod sursa (job #405875) | Cod sursa (job #140982) | Cod sursa (job #2213776)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
struct nodTrie {
int ap, fin;
nodTrie* fii[26];
nodTrie () {
ap = fin = 0;
for (int i = 0; i < 26; i++)
fii[i] = NULL;
}
}*root;
int op;
string s;
void BagaLaArbore(string s) {
nodTrie *p = root;
for (int i = 0; i < s.size(); i++) {
if (p -> fii[s[i] - 'a'] == NULL)
p -> fii[s[i] - 'a'] = new nodTrie;
p = p -> fii[s[i] - 'a'];
p -> ap++;
}
p -> fin++;
}
void Scoate (string s) {
nodTrie *p = root, *p1;
for (int i = 0; i < s.size(); i++) {
p1 = p;
p = p -> fii[s[i] - 'a'];
p -> ap--;
if (p1 -> ap == 0)
delete p1;
else if (p -> ap == 0)
p1 -> fii[s[i] - 'a'] = NULL;
}
p -> fin--;
if (p -> ap == 0)
delete p;
}
int Numara (string s) {
nodTrie *p = root;
for (int i = 0; i < s.size(); i++) {
if (p -> fii[s[i] - 'a'] == NULL)
return 0;
p = p -> fii[s[i] - 'a'];
}
return p -> fin;
}
int prefix (string s) {
nodTrie *p = root;
for (int i = 0; i < s.size(); i++) {
if (p -> fii[s[i] - 'a'] == NULL)
return i;
p = p -> fii[s[i] - 'a'];
}
return s.size();
}
int main()
{
root = new nodTrie;
root -> ap = 1;
while (fin >> op >> s) {
if (op == 0)
BagaLaArbore(s);
if (op == 1)
Scoate(s); /// pt. ca a fost baiat rau
if (op == 2)
fout << Numara(s) << "\n";
if (op == 3)
fout << prefix(s) << "\n";
}
return 0;
}