Cod sursa(job #2534329)

Utilizator bilghinIsleam Bilghin bilghin Data 30 ianuarie 2020 13:56:58
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream si("trie.in");
ofstream so("trie.out");
int nr;
char s[27];

struct Trie
{
    int nr,rasp;
    Trie *fii[27];
};

Trie *t=new Trie();

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

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

int cauta1(Trie *poz,char *s)
{
    int x=*s-'a';
    if(*s=='\0')
    {
        return poz->rasp;
    }
    if(poz->fii[*s-'a']==NULL)
    {
        return 0;
    }
    else
    {
        cauta1(poz->fii[x],s+1);
    }

}
int cauta2(Trie *poz,char *s)
{
    if(*s=='\0')
    {
        return nr;
    }
    if(poz->fii[*s-'a']==NULL || poz->fii[*s-'a']->nr == 0)
    {
        return nr;
    }
    nr++;
    return cauta2(poz->fii[*s-'a'],s+1);
}
int main()
{
    int op;

    while(si>>op>>s)
    {
        nr=0;
        switch(op){
            case 0:adauga(t,s);break;
            case 1:sterge(t,s);break;
            case 2:so<<cauta1(t,s)<<'\n';break;
            case 3:so<<cauta2(t,s)<<'\n';break;
        }
        for(int i=0;i<27;i++){
            s[i]='\0';
        }
    }

    return 0;
}