Cod sursa(job #3308628)

Utilizator anca.gdDumitru Anca Gabriela anca.gd Data 26 august 2025 18:11:20
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.58 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
struct trie{
    int cnt, nrf;
    trie * fii[26];
    trie() {
        cnt=0; nrf=0;
        for(int i=0; i<26; i++)
            fii[i]=nullptr;
    }
};
trie* tr;
void add(trie * t, char *s, int n, int l){
    if(l==n){
        t -> cnt++;
        return;
    }
    int indx=s[l]-'a';
    if(t -> fii[indx] == nullptr){
        t -> fii[indx] = new trie;
        t -> nrf++;
    }
    add(t->fii[indx], s, n, l+1);
}
bool del(trie * t, char *s, int n, int l){
    if(l==n)
        t -> cnt--;
    else if(del(t -> fii[s[l]-'a'], s, n, l+1)){
            t -> nrf--;
            t -> fii[s[l]-'a'] = nullptr;
        }
    if(t -> cnt == 0 && t -> nrf == 0 && t != tr){
        delete t;
        return 1;
    }
    return 0;
}
int f(trie *t, char *s, int n, int l){
    if(l==n)
        return t->cnt;
    if(t->fii[s[l]-'a']!=nullptr)
        return f(t->fii[s[l]-'a'], s, n, l+1);
    return 0;
}
int pf(trie *t, char *s, int n, int l){
    if(l==n)
        return n;
    if(t->fii[s[l]-'a']!=nullptr)
        return pf(t->fii[s[l]-'a'], s, n, l+1);
    return l;
}
int main()
{
    tr=new trie;
    int op; char s[22];
    while(cin>>op>>s){
        int n=strlen(s);
        if(op==0)
            add(tr, s, n, 0);
        if(op==1)
            del(tr, s, n, 0);
        if(op==2)
            cout<<f(tr, s, n, 0);
        if(op==3)
            cout<<pf(tr, s, n, 0);
        if(op>1)
            cout<<'\n';
    }
    return 0;
}