Cod sursa(job #2814474)

Utilizator As932Stanciu Andreea As932 Data 8 decembrie 2021 10:32:01
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.59 kb
#include <bits/stdc++.h>

using namespace std;

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

int op;
string s;

struct trie {
    int nrCuv, fq;
    trie* desc[27];

    trie(){
        nrCuv = 0;
        fq = 0;
        for(int i = 0; i <= 26; i++)
            desc[i] = nullptr;
    }
};

void add(trie* node, int idx){
    node->fq++;

    if(idx == s.length()){
        node->nrCuv++;
        return ;
    }

    int lit = s[idx] - 'a';

    if(node->desc[lit] == nullptr)
        node->desc[lit] = new trie;

    add(node->desc[lit], idx + 1);
}

void del(trie* node, int idx){
    node->fq--;

    if(idx == s.length()){
        node->nrCuv--;
        return;
    }

    int lit = s[idx] - 'a';

    del(node->desc[lit], idx + 1);
}

int nrAp(trie* node, int idx){
    if(idx == s.length())
        return node->nrCuv;

    int lit = s[idx] - 'a';

    if(node->desc[lit] == nullptr || node->desc[lit]->fq == 0)
        return 0;

    return nrAp(node->desc[lit], idx + 1);
}

int pref(trie* node, int idx){
    if(idx == s.length())
        return idx;

    int lit = s[idx] - 'a';

    if(node->desc[lit] == nullptr || node->desc[lit]->fq == 0)
        return idx;

    return pref(node->desc[lit], idx + 1);
}

int main()
{
    trie* root = new trie;

    while(fin >> op >> s){
        if(op == 0)
            add(root, 0);
        else if(op == 1)
            del(root, 0);
        else if(op == 2)
            fout << nrAp(root, 0) << "\n";
        else
            fout << pref(root, 0) << "\n";
    }

    return 0;
}