Pagini recente » Cod sursa (job #2890876) | Rating Petrasco Sandu (FMI_Petrasco_Sandu) | Cod sursa (job #2750428) | Cod sursa (job #2717741) | Cod sursa (job #1168482)
#include <fstream>
#include <string>
#include <cstring>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
typedef string::iterator sIterator;
class Trie
{
private:
int aktdb, vege;
Trie* kov[26];
public:
Trie()
{
vege = 0;
aktdb = 0;
memset (kov, 0, 104);
}
~Trie()
{
for (int i=0; i<26; i++)
if (kov[i])
{
delete kov[i];
kov[i] = NULL;
}
}
void betesz (sIterator kezd, sIterator veg)
{
if (kezd == veg) {vege++; return;}
if (!kov[*kezd-'a']) kov[*kezd-'a'] = new Trie;
kov[*kezd-'a']->aktdb++;
kov[*kezd-'a']->betesz (kezd+1, veg);
}
void kivesz (sIterator kezd, sIterator veg)
{
if (kezd == veg) return;
if (kov[*kezd-'a']->aktdb == 1) {
delete kov[*kezd-'a'];
kov[*kezd-'a'] = NULL;
return;
}
else {
kov[*kezd-'a']->aktdb--;
kov[*kezd-'a']->kivesz (kezd+1, veg);
}
}
int szamol (sIterator kezd, sIterator veg)
{
if (kezd+1 == veg) return kov[*kezd-'a']->vege;
if (kov[*kezd-'a']) return kov[*kezd-'a']->szamol (kezd+1, veg);
else return 0;
}
int prefix (sIterator kezd, sIterator veg)
{
if (kov[*kezd-'a']) return 1 + kov[*kezd-'a']->prefix(kezd+1, veg);
return 0;
}
};
Trie* gyoker = new Trie;
int p;
string akt;
void betesz(string&), kivesz(string&), torol(string&), szamol(string&), prefix(string&);
int main()
{
while (f >> p >> akt)
{
if (p == 0) gyoker->betesz(akt.begin(), akt.end());
else if (p == 1) gyoker->kivesz(akt.begin(), akt.end());
else if (p == 2) g << gyoker->szamol(akt.begin(), akt.end()) << "\n";
else if (p == 3) g << gyoker->prefix(akt.begin(), akt.end()) << "\n";
}
}