Cod sursa(job #3124400)

Utilizator MerlinTheWizardMelvin Abibula MerlinTheWizard Data 28 aprilie 2023 15:26:37
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include<iostream>
#include<fstream>

using namespace std;

ifstream f("trie.in");
ofstream g("trie.out");

struct trie
{
    int rasp,nr;
    trie *fii[27];
};
trie* tr = new trie();

int max1 = 0;

void adauga(trie* t, char *c)
{
    t->nr++;
    if(*c == '\0')
    {
        t -> rasp++;
        return;
    }
    if(t -> fii[*c-'a'] == NULL)
        t -> fii[*c-'a'] = new trie();
    adauga(t->fii[*c-'a'],c+1);
}

void scoate(trie *t, char *c)
{
    t->nr--;
    if(*c == '\0')
    {
        t->rasp--;
        return;
    }
    int x = *c - 'a';
    scoate(t->fii[x],c+1);
}

void search1(trie *t, char *c)
{
    if(*c == '\0')
    {
        g<<t->rasp<<"\n";
        return;
    }
    int x = *c - 'a';
    if(t->fii[x] == NULL)
    {
        g<<"0"<<"\n";
        return; 
    }
    search1(t->fii[x],c+1);
}

void search2(trie *t, char *c)
{
    int x = *c - 'a';
    if(*c == '\0' || t->fii[x] == NULL || t->fii[x]->nr == 0)
    {
        return;
    }
    max1++;
    search2(t->fii[x],c+1);
}

int main()
{
    int val;
    char c[22];
    while(f>>val>>c)
    {
        max1 = 0;
        if(val == 0)
            adauga(tr,c);
        if(val == 1)
            scoate(tr,c);
        if(val == 2)
            search1(tr,c);
        if(val == 3)
        {
            search2(tr,c);
            g<<max1<<"\n";
        }
    }
}