Pagini recente » Cod sursa (job #3264334) | Cod sursa (job #149198) | Cod sursa (job #2454293) | Cod sursa (job #89603) | Cod sursa (job #3239468)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
struct Node
{
int nr = 0;
Node *next['z'-'a'+1] = {};
/*
next[0] -> 'a'
next[1] -> 'b'
...
next[25] -> 'z'
*/
};
void betesz(Node *&akt, const char *str)
{
if (akt == nullptr)
akt = new Node;
if (*str == '\0')
akt->nr++;
else
betesz(akt->next[*str - 'a'], str+1);
}
int hanyszor_van(Node *akt, const char *str)
{
if (akt == nullptr)
return 0;
if (*str == '\0')
return akt->nr;
return hanyszor_van(akt->next[*str - 'a'], str+1);
}
void torol(Node *&akt, const char *str)
{
if (akt == nullptr)
return;
if (*str == '\0')
akt->nr--;
else
torol(akt->next[*str - 'a'], str+1);
if (akt->nr == 0) {
bool van_gyerek = false;
for (char c = 'a'; c <= 'z'; c++)
if (akt->next[c-'a'] != nullptr) {
van_gyerek = true;
break;
}
if (!van_gyerek) {
delete akt;
akt = nullptr;
}
}
}
/*int max_prefixhossz(Node *akt, const char *str)
{
if (akt == nullptr)
return -1; // mert eggyel több "1+" volt...
if (*str == '\0')
return 0;
return 1 + max_prefixhossz(akt->next[*str - 'a'], str+1);
}*/
int max_prefixhossz(Node *akt, const char *str)
{
if (*str == '\0' || akt->next[*str - 'a'] == nullptr)
return 0;
return 1 + max_prefixhossz(akt->next[*str - 'a'], str+1);
}
int main()
{
ifstream fin("trie.in");
ofstream fout("trie.out");
Node *root = new Node;
int tipus;
char szo[25];
while (fin >> tipus >> szo) {
if (tipus == 0)
betesz(root, szo);
else if (tipus == 1)
torol(root, szo);
else if (tipus == 2)
fout << hanyszor_van(root, szo) << endl;
else
fout << max_prefixhossz(root, szo) << endl;
}
return 0;
}