Cod sursa(job #2175145)

Utilizator GeorgeCalinPetruta George-Calin GeorgeCalin Data 16 martie 2018 15:39:20
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.5 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");

char ss[28];

struct trie
{
    int cn,nr;
    trie *fiu[27];
    trie()
    {
        cn=nr=0;
        memset(fiu,0,sizeof(fiu));
    }
};
trie *t=new trie;

void adauga(trie *nod,char *s)
{
    if(*s==NULL)
    {
        nod->cn++;
        return;
    }
    if(!nod->fiu[*s-'a'])
    {
        nod->fiu[*s-'a']=new trie;
        nod->nr++;
    }
    adauga(nod->fiu[*s-'a'],s+1);
}

int del(trie *nod,char *s)
{
    if(*s==NULL)
    {
        nod->cn--;
    }
    else
    {
        if(del(nod->fiu[*s-'a'],s+1)==1)
        {
            nod->fiu[*s-'a']=0;
            nod->nr--;
        }
    }
    if(nod->cn==0&&nod->nr==0&&nod!=t)
    {
        delete nod;
        return 1;
    }
    return 0;
}

int nr_apar(trie *nod,char *s)
{
    if(*s==NULL)
        return nod->cn;
    if(nod->fiu[*s-'a'])
        return nr_apar(nod->fiu[*s-'a'],s+1);
    return 0;
}

int pre(trie *nod,char *s,int k)
{
    if(*s==NULL||!nod->fiu[*s-'a'])
        return k;
    pre(nod->fiu[*s-'a'],s+1,k+1);
}

int main()
{
    fin.getline(ss,28);
    while(!fin.eof())
    {
        if(ss[0]=='0')
            adauga(t,ss+2);
        if(ss[0]=='1')
            del(t,ss+2);
        if(ss[0]=='2')
            fout<<nr_apar(t,ss+2)<<"\n";
        if(ss[0]=='3')
            fout<<pre(t,ss+2,0)<<"\n";
        fin.getline(ss,28);
    }
    return 0;
}