Cod sursa(job #2987999)

Utilizator Diana_IonitaIonita Diana Diana_Ionita Data 3 martie 2023 11:47:12
Problema Trie Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int nod,n;
int i,j;
struct trie
{
    int fr,nr;
    trie* f[30];
    trie()
    {
        memset(f, 0, sizeof f);
        fr = nr = 0;
    }
};
trie *T;
void Add(string s)
{
    trie *x=T;
    for(int i=0; i<s.size(); i++)
    {
        int y=s[i]-'a';
        if(!x->f[y])
        {
            x->f[y]=new trie;
        }
        x=x->f[y];
        x->nr++;
    }
    x->fr++;
}
void sterge(string s)
{
    trie *x=T;
    for(int i=0; i<s.size(); i++)
    {
        int y=s[i]-'a';
        x=x->f[y];
        x->nr--;
    }
    x->fr--;
}
int  numaracuv(string s)
{

    trie *x=T;
    for(int i=0; i<s.size(); i++)
    {

        int y=s[i]-'a';
        x=x->f[y];
    }
    return x->fr;
}
int prefix(string s)
{
    trie *x=T;
    int ok=0;
    for(int i=0; i<s.size(); i++)
    {
        int y=s[i]-'a';
        x=x->f[y];
        ok++;
        if(x->nr<=1)
            break;
    }
    return ok;
}
int main()
{
    int tip;
    string s;
    T=new trie;

    while(fin>>tip>>s)
    {//cout<<s;
        fin.get();
        if(tip==0)
        {
            Add(s);
        }
        else if(tip==1)
        {
            sterge(s);

        }
        else if(tip==2)
        {
            fout<<numaracuv(s);
            fout<<'\n';
        }
        else
        {
            fout<<prefix(s);
            fout<<'\n';
        }
    }
    return 0;
}