Cod sursa(job #3349132)

Utilizator parrot279Sofi Tudose parrot279 Data 25 martie 2026 17:15:18
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.98 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");

struct trie
{
    trie *fii[26];
    int nrcuv = 0, cntlitera = 0;
    trie()
    {
        for(int i = 0; i <= 25; ++i)
            fii[i] = nullptr;
    }

    void adauga(string s, unsigned poz)
    {
        int c = s[poz] - 'a';

        if(fii[c] == nullptr)
            fii[c] = new trie();

        fii[c]->cntlitera++;

        if(poz == s.size() - 1)
        {
            fii[c]->nrcuv++;
            return;
        }
        fii[c]->adauga(s, poz+1);
    }

    void sterge(string s, unsigned poz)
    {
        int c = s[poz] - 'a';

        if(poz == s.size() - 1)
        {
            fii[c]->cntlitera--;
            fii[c]->nrcuv--;
            if(fii[c]->cntlitera == 0)
            {
                delete fii[c];
                fii[c] = nullptr;
            }
            return;
        }
        fii[c]->sterge(s, poz+1);
        fii[c]->cntlitera--;
        if(fii[c]->cntlitera == 0)
        {
            delete fii[c];
            fii[c] = nullptr;
        }
    }

    int countcuv(string s, unsigned poz)
    {
        int c = s[poz] - 'a';

        if(fii[c] == nullptr)
            return 0;

        if(poz == s.size() - 1)
            return fii[c]->nrcuv;

        return fii[c]->countcuv(s, poz+1);
    }

    int lpref(string s, unsigned poz)
    {
        int c = s[poz] - 'a';

        if(fii[c] == nullptr)
            return 0;

        if(poz == s.size()-1)
            return 1;

        return 1 + fii[c]->lpref(s, poz+1);
    }

};
trie T;

int main()
{
    int tip;
    while(fin>>tip)
    {
        string s;
        fin>>s;
        if(tip == 0)
            T.adauga(s, 0);
        else if(tip == 1)
            T.sterge(s, 0);
        else if(tip == 2)
            fout<<T.countcuv(s, 0)<<"\n";
        else
            fout<<T.lpref(s, 0)<<"\n";
    }


    return 0;
}