Cod sursa(job #2552388)

Utilizator GabyD002Dobrita Gabriel GabyD002 Data 20 februarie 2020 20:05:17
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>
#define fiu s[lg]-'a'
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");

int n,k;
string s;

struct trie {int fr,nrCuvinte,muchie[30];};

trie v[185000];

void Update(int nod,int lg,int x)
{   if(lg==s.size())
    {   v[nod].nrCuvinte+=x;
        v[nod].fr+=x;
        return;
    }
    if(!v[nod].muchie[fiu])
        v[nod].muchie[fiu]=++k;
    v[v[nod].muchie[fiu]].fr+=x;
    Update(v[nod].muchie[fiu],lg+1,x);
}

int Query(int nod,int lg)
{   if(lg==s.size())
        return v[nod].nrCuvinte;
    if(!v[nod].muchie[fiu])
        return 0;
    if(!v[v[nod].muchie[fiu]].fr)
        return 0;
    return Query(v[nod].muchie[fiu],lg+1);
}

int main()
{   for(int t; f>>t;)
    {   f>>s;
        if(!t)
            Update(0,0,1);
        else
        if(t==1)
            Update(0,0,-1);
        else
        if(t==2)
            g<<Query(0,0)<<'\n';
        else
        {   int nod=0,lg=0;
            while(v[nod].muchie[fiu] && lg<s.size())
            {   if(!v[v[nod].muchie[fiu]].fr)
                    break;
                nod=v[nod].muchie[fiu];
                lg++;
            }
            g<<lg<<'\n';
        }
    }
    g.close(); f.close(); return 0;
}