Cod sursa(job #3139033)

Utilizator stanciu_anaStanciu Ana-Maria stanciu_ana Data 24 iunie 2023 13:51:12
Problema Trie Scor 55
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.21 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream cin("trie.in");
ofstream cout("trie.out");

struct Nod
{
    int val_rep, val;
    Nod *urm[30];
    Nod()
    {
        val = 0;
        val_rep = 0;
        for(int i = 0; i <= 29; i++)
            urm[i] = NULL;
    }
}*start;

int x;
char sir[30];
Nod *poz;

int main()
{
    start = new Nod;
    while(cin >> x >> sir)
    {
        if(x == 0)
        {
            poz = start;
            int q = strlen(sir);
            for(int i = 0; i < q; i++)
            {
                int poz_lit = sir[i] - 'a';
                if(poz->urm[poz_lit] == NULL)
                    poz->urm[poz_lit] = new Nod;
                poz->val_rep++;
                poz = poz->urm[poz_lit];
            }
            poz->val++;
        }
        else if(x == 1)
        {
            poz = start;
            int q = strlen(sir);
            for(int i = 0; i < q; i++)
            {
                int poz_lit = sir[i] - 'a';
                if(poz->val_rep > 0)
                    poz->val_rep--;
                poz = poz->urm[poz_lit];
            }
            poz->val--;
        }
        else if(x == 2)
        {
            poz = start;
            int q = strlen(sir);
            int ok = 1;
            for(int i = 0; i < q && ok; i++)
            {
                int poz_lit = sir[i] - 'a';
                if(poz->urm[poz_lit] == NULL)
                    ok = 0;
                else
                    poz = poz->urm[poz_lit];

            }
            if(ok == 1 && poz->val > 0)
                cout << poz->val<<'\n';
            else
                cout << '0'<<'\n';

        }
        else if(x == 3)
        {
            poz = start;
            int cnt = 0;
            int q = strlen(sir);
            int ok = 1;
            for(int i = 0; i < q&&ok; i++)
            {
                int poz_lit = sir[i] - 'a';
                if(poz->urm[poz_lit] == NULL || poz->val_rep < 1)
                    ok = 0;
                else
                    poz = poz->urm[poz_lit], cnt++;
            }
            cout << cnt << '\n';

        }


    }

    return 0;
}