Cod sursa(job #3292608)

Utilizator mihaigeorgescuGeorgescu Mihai mihaigeorgescu Data 8 aprilie 2025 18:34:37
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.91 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fcin("trie.in");
ofstream fout("trie.out");
int c, rez;
string x;
struct trie
{
    int nrf,cnt;
    trie *fii[26];
    trie()
    {
        nrf=0, cnt=0;
        for (int i = 0; i < 26; ++i)
            fii[i] = nullptr;
    }

    ~trie()
    {
        for (int i = 0; i < 26; ++i)
            delete fii[i];
    }
};
trie *root = new trie;
inline void insert(const string &s, trie *nod, int poz)
{
    if(poz==s.size())
    {
        nod->cnt++;
        return;
    }
    int i=s[poz]-'a';
    if(nod->fii[i]==nullptr)
        nod->fii[i]=new trie, nod->nrf++;
    insert(s, nod->fii[i], poz+1);
}
inline int erase(const string &s, trie *nod, int poz)
{
    int i=s[poz]-'a';
    if(poz==s.size())
    {
        nod->cnt--;
    }
    else
    {
        if(erase(s, nod->fii[i], poz+1))
        {
            nod->fii[i]=nullptr;
            nod->nrf--;
        }
    }
    if(nod->nrf==0 && nod->cnt==0 && nod!=root)
    {
        delete nod;
        return 1;
    }
    return 0;
}
inline void fr(const string &s, trie *nod, int poz)
{
    if(poz==s.size())
    {
        rez=nod->cnt;
        return;
    }
    int i=s[poz]-'a';
    if(nod->fii[i]!=nullptr)
        fr(s, nod->fii[i], poz+1);
}
inline void query(const string &s, trie *nod, int poz)
{
    if(poz==s.size())
    {
        rez=poz;
        return;
    }
    int i=s[poz]-'a';
    if(nod->fii[i]!=nullptr)
    {
        query(s, nod->fii[i], poz+1);
    }
    else
    {
        rez=poz;
        return;
    }
}
int main()
{
    while(fcin>>c>>x)
    {
        rez=0;
        if(c==0)
            insert(x,root,0);
        if(c==1)
            if(erase(x,root,0));
        if(c==2)
            fr(x,root,0), fout<<rez<<'\n';
        if(c==3)
            query(x,root,0), fout<<rez<<'\n';

    }
    return 0;
}