Cod sursa(job #2532819)

Utilizator xXoctavianXxStanescu Matei Octavian xXoctavianXx Data 28 ianuarie 2020 13:39:01
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("trie.in");
ofstream fout("trie.out");

char s[21];
int op;
int nr;

struct trie
{
    int val,nr;
    trie *fii[26];
};

trie *t=new trie();

void adauga(trie *poz, char *s)
{
    poz->nr++;
    if(*s=='\0')
    {
        poz->val++;
        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->val--;
        return;
    }
    sterge(poz->fii[*s-'a'],s+1);
}

int cauta(trie *poz, char *s)
{
    if(*s=='\0')
    {
        return poz->val;
    }
    if(poz->fii[*s-'a']==NULL)
    {
        return 0;
    }
    return cauta(poz->fii[*s-'a'],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;
    }
    else
    {
        nr++;
    }
    return cauta2(poz->fii[*s-'a'],s+1);
}

int main()
{

    while(fin>>op>>s)
    {
        if(op==0)
        {
            adauga(t,s);
        }
        else if(op==1)
        {
            sterge(t,s);
        }
        else if(op==2)
        {
            fout<<cauta(t,s)<<"\n";
        }
        else
        {
            nr=0;
            fout<<cauta2(t,s)<<"\n";
        }
        for(int i=1; i<=20; i++) s[i]='\0';
    }
    return 0;
}