Cod sursa(job #2986692)

Utilizator MerlinTheWizardMelvin Abibula MerlinTheWizard Data 28 februarie 2023 22:29:45
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.77 kb
    #include<iostream>
    #include<fstream>
    using namespace std;

    ifstream f("trie.in");
    ofstream g("trie.out");

    int cnt = 0;
    //string s;
    char s[25];

    struct trie
    {
        int nr,rasp;
        trie *fii[27];
    };
    trie *t = new trie();

    void adauga(trie *tr,char *s)
    {
        tr->nr++;
        if(*s == '\0')
        {
            tr->rasp++;
            return;
        }
        int x = *s - 'a';
        if(tr->fii[x] == NULL)
        {
            tr->fii[x] = new trie();
        }
        adauga(tr->fii[x],s+1);
    }

    void scoate(trie *tr, char *s)
    {
        tr->nr--;
        if(*s == '\0')
        {
            tr->rasp--;
            return;
        }
        int x = *s - 'a';
        scoate(tr->fii[x],s+1);
    }

    int search1(trie *tr, char *s)
    {
        if(*s == '\0')
            return tr->rasp;
        int x = *s - 'a';
        if(tr->fii[x] == NULL)
        {
            return 0;
        }
        return search1(tr->fii[x],s+1);
    }

    int search2(trie *tr, char *s)
    {
        if(*s == '\0')
            return cnt;
        int x = *s - 'a';
        if(tr->fii[x] == NULL || tr->fii[x]->nr == 0)
            return cnt;
        else
            cnt++;
        return search2(tr->fii[x],s+1);
    }

    int main()
    {
        int x;
        while(f>>x>>s)
        {
            if(x == 0)
                adauga(t,s);
            if(x == 1)
                scoate(t,s);
            if(x == 2)
                g<<search1(t,s)<<"\n";
            if(x == 3)
            {
                cnt = 0;
                g<<search2(t,s)<<"\n";
            }
            for(int i=0;i<=25;i++)
                s[i] = '\0';
        }
    }