Cod sursa(job #3279551)

Utilizator robert111Peter Robert robert111 Data 23 februarie 2025 14:22:33
Problema Trie Scor 5
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.96 kb
#include <fstream>

using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
struct nod///26 de ref
{
    nod* ch[26];
    int cnt;
    int ter;
    nod()
    {
        ter=0;
        cnt=0;
        for(int i=0; i<26; i++)
            ch[i]=nullptr;
    }
}*root;
void inse(string s)
{
    nod* a=root;
    for(int i=0; i<s.size(); i++)
    {
        int ind=s[i]-'a';
        //cout<<a->cnt;
        if(!a->ch[ind])
        {
            //cout<<"-";
            a->ch[s[i]-'a']=new nod;
            a->ch[s[i]-'a']->cnt++;
        }
        else
            a->ch[s[i]-'a']->cnt++;
        a=a->ch[s[i]-'a'];
    }
    a->ter++;
}
void del(string s)
{
    nod* a=root;
    for (int i=0; i<s.size(); i++)
    {
        if (!a->ch[s[i]-'a'] || a->ch[s[i]-'a']->cnt==0)
        {
            return;
        }
        a=a->ch[s[i]-'a'];
    }
    if(a->ter)
    {
        a->ter--;
        a=root;
        for (int i=0; i<s.size(); i++)
        {
            a->ch[s[i]-'a']->cnt--;
            a=a->ch[s[i]-'a'];
        }
    }
}
int cer2(string s)
{
    nod* a=root;
    for(int i=0; i<s.size(); i++)
    {
        if(!a->ch[s[i]-'a'] || a->ch[s[i]-'a']->cnt==0)//il cream
            return 0;
        a=a->ch[s[i]-'a'];
    }
    return a->ter;
}
int cer3(string s)
{
    int max1=0;
    for(int j=0; j<s.size(); j++)
    {
        nod* a=root;
        for(int i=j; i<s.size(); i++)
        {
            if(!a->ch[s[i]-'a'] || a->ch[s[i]-'a']->cnt==0)
                break;
            if(/*a->ch[s[i]-'a']->ter>0 && */i-j+1>max1)
                max1=i-j+1;
            a=a->ch[s[i]-'a'];
        }
    }
    return max1;
}
int main()
{
    string s;
    int a;
    root=new nod;
    while(cin>>a>>s)
    {
        if(a==0)inse(s);
        else if(a==1)
            del(s);
        else if(a==2)cout<<cer2(s)<<'\n';
        else
            cout<<cer3(s)<<'\n';
    }
    return 0;
}