Cod sursa(job #3198483)

Utilizator cosmin45678Andrei Cosmin cosmin45678 Data 29 ianuarie 2024 17:00:49
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.88 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct tNod
{
    tNod* fiu[26];
    int cnt;/// din cate cuvinte face parte nodul
    int cuv;/// cate cuvinte se termina in acel nod
    tNod()
    {
        for(int i=0;i<26;i++)
            fiu[i]=NULL;
        cnt=cuv=0;
    }
};
tNod *root;
int op;
char w[25];
int main()
{
    root=new tNod;
    while(f>>op)
    {
        f>>w;
        if(op==0)
        {
            char *p=w;
            tNod *q=root;
            while(*p)
            {
                int c=*p-'a';
                if(q->fiu[c]==NULL)
                    q->fiu[c]=new tNod;
                q=q->fiu[c];
                q->cnt++;
                p++;
            }
            q->cuv++;
        }
        else if(op==1)
        {
            char *p=w;
            tNod *q=root;
            while(*p)
            {
                int c=*p-'a';
                q=q->fiu[c];
                q->cnt--;
                p++;
            }
            q->cuv--;
        }
        else if(op==2)
        {
            char *p=w;
            tNod *q=root;
            while(*p)
            {
                int c=*p-'a';
                if(q->fiu[c]==NULL)break;
                if(q->fiu[c]->cnt==0)break;
                q=q->fiu[c];
                p++;
            }
            if(*p==0)
                g<<q->cuv<<'\n';
            else
                g<<"0\n";
        }
        else
        {
            char *p=w;
            tNod *q=root;
            int lg=0;
            while(*p)
            {
                int c=*p-'a';
                if(q->fiu[c]==NULL)break;
                if(q->fiu[c]->cnt==0)break;
                lg++;
                q=q->fiu[c];
                p++;
            }
            g<<lg<<'\n';
        }
    }
    return 0;
}