Cod sursa(job #2405254)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 14 aprilie 2019 11:22:09
Problema Trie Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
using namespace std;

char x[25];
struct arb{
    int trec,gata;
    arb *next[26];
    arb()
    {
        trec=gata=0;
        memset(next,0,sizeof(next));
    }
};

void insert(char *c,arb *nod)
{
    ++nod->trec;
    if(*c==NULL)
        {
        ++nod->gata;
        return;
        }
    if(nod->next[ (*c)-'a' ] == NULL )
    {
        arb *fiu=new arb;
        nod->next[ (*c)-'a' ] = fiu;
    }

    insert(c+1,nod->next[ (*c)-'a' ]);
}
void del(char *c,arb *nod)
{
    --nod->trec;
    if(*c==NULL)
    {
        --nod->gata;
        return;
    }
    del(c+1,nod->next[(*c)-'a']);
}
int find_ap(char *c,arb *nod)
{
    if((*c)==NULL)
        return nod->gata;
    if( nod->next[ (*c)-'a'] == NULL )
        return 0;
    return find_ap(c+1,nod->next[ (*c)-'a']);
}

int find_max(char *c,arb *nod,int deep)
{
    if((*c)==NULL || nod->next[ (*c)-'a'] == NULL || nod->next[ (*c)-'a']->trec ==0)
        return deep;
    return find_max(c+1,nod->next[ (*c)-'a'],deep+1);
}

int main()
{
    arb *inc=new arb;
    ifstream f("trie.in");
    ofstream g("trie.out");
    int op;


    while(f>>op>x)
    {
        f.get();
        if(!op)
            insert(x,inc);
        if(op==1)
            del(x,inc);
        if(op==2)
            g<<find_ap(x,inc)<<"\n";

        if(op==3)
            g<<find_max(x,inc,0);
    }

    return 0;
}