Cod sursa(job #3124397)

Utilizator MerlinTheWizardMelvin Abibula MerlinTheWizard Data 28 aprilie 2023 14:54:04
Problema Trie Scor 15
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 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 poz)
{
    int x = *c - 'a';
    if(*c == '\0' || t->fii[x] == NULL)
    {
        return;
    }
    if(t->nr > 1)
        max1 = max(max1,poz);
    search2(t->fii[x],c+1,poz+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,1);
            g<<max1<<"\n";
        }
    }
}