Cod sursa(job #2144309)

Utilizator AndreiTurcasTurcas Andrei AndreiTurcas Data 26 februarie 2018 17:49:52
Problema Trie Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");

char ss[27];

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

trie *t = new trie;

void intr(trie *nod,char *s)
{
    if(*s==NULL)
    {
        nod->cn++;
        return;
    }
    if(nod->fiu[*s-'a']==0)
    {
        nod->fiu[*s-'a']=new trie;
        nod->nr++;
    }
    intr(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))
        {
            nod->fiu[*s-'a']=0;
            nod->nr--;
        }
    }
    if(nod->cn==0&&nod->nr==0&&nod!=t)
        {delete nod;return 1;}
    return 0;
}

int nr_ap(trie *nod,char *s)
{
    if(*s==NULL)
        return nod->cn;
    if(nod->fiu[*s-'a'])
        return nr_ap(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,27);
    while(!fin.eof())
    {
        if(ss[0]=='0')
            intr(t,ss+2);
        if(ss[0]=='1')
            del(t,ss+2);
        if(ss[0]=='2')
            fout<<nr_ap(t,ss+2)<<"\n";
        if(ss[0]=='3')
            fout<<pre(t,ss+2,0)<<"\n";
        fin.getline(ss,27);
    }
    return 0;
}