Cod sursa(job #3276682)

Utilizator Dia3141Costea Diana Stefania Dia3141 Data 14 februarie 2025 09:36:14
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
int task,noduri,i,lg;
string s;
struct nod{
    int cuvant,prefix,fr[26];
}trie[300001];
void add(int n){
    trie[n].prefix++;
    if(s[i]==0){
        trie[n].cuvant++;
        return;
    }
    if(trie[n].fr[s[i]-'a']==0)
        trie[n].fr[s[i]-'a']=++noduri;
    add(trie[n].fr[s[i++]-'a']);
}
void pop(int n){
    trie[n].prefix--;
    if(s[i]==0)
        trie[n].cuvant--;
    else
        pop(trie[n].fr[s[i++]-'a']);
}
int get_count(int n){
    if(s[i]==0)
        return trie[n].cuvant;
    if(trie[n].fr[s[i]-'a']==0)
        return 0;
    else
        return get_count(trie[n].fr[s[i++]-'a']);
}
void max_prefix(int n){
    if(trie[n].prefix==0)
        return;
    lg=i;
    if(s[i]==0)
        return ;
    if(trie[n].fr[s[i]-'a']!=0)
        max_prefix(trie[n].fr[s[i++]-'a']);
}
signed main()
{
    while(cin>>task>>s){
        i=0;
        if(task==0)
            add(0);
        else if(task==1)
            pop(0);
        else if(task==2)
            cout<<get_count(0)<<'\n';
        else{
            lg=0;
            max_prefix(0);
            cout<<lg<<'\n';
        }
    }
    return 0;
}