Cod sursa(job #730125)

Utilizator blk.irineluIrina Ursateanu blk.irinelu Data 4 aprilie 2012 19:20:58
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.98 kb
#include <fstream>

using namespace std;

ifstream f("trie.in");
ofstream g("trie.out");

struct nod
{
    int aparitii,nrfii;
    nod *fiu[26];
    nod()
    {
        aparitii=nrfii=0;
        for(int i=0;i<26;i++)
         fiu[i]=0;
    }
} *prim=new nod();

char cuvant[26];

void ins()
{
    nod *p=prim;
    int i=0;
    while(cuvant[i]!='\0')
    {
        int x=cuvant[i]-'a';
        if(p->fiu[x]==NULL)
        {
            p->fiu[x]= new nod();
            p=p->fiu[x];
            p->aparitii=1;
            if(cuvant[i+1]==NULL) p->nrfii=1;
        }
        else
        {
            p=p->fiu[x];
            p->aparitii++;
            if(cuvant[i+1]==NULL) p->nrfii++;
        }
        i++;
    }
}

void sterg()
{
    nod *p=prim,*q=prim;
    int i=0;
    while(cuvant[i] && p)
    {
        int x=cuvant[i]-'a';
        q=p;
        p=p->fiu[x];
        p->aparitii--;
        if(cuvant[i+1]==NULL) p->nrfii--;
        if(p->aparitii==0) q->fiu[x]=NULL;
        if(q->aparitii==0  && q!=prim) delete q;
        i++;
    }
}

void ap()
{
    int i=0;
    nod *p =prim;
    while(cuvant[i]&&p)
    {
        int x=cuvant[i]-'a';
        p=p->fiu[x];
       // if(p)
         //    g<<"0\n" ;
        if(cuvant[i+1]==NULL)
            g<<p->nrfii<<"\n";
        i++;
    }
}

void pref()
{
    int i=0;
    nod *p=prim;
    while(cuvant[i])
    {
        int x=cuvant[i]-'a';
        p=p->fiu[x];
        if (!p)
        {
            g<<i<<'\n';
            return ;
        }
       i++;
    }
    g<<i<<'\n';
}

int main()
{
    int cod;
    while(f>>cod)
    {
        f>>cuvant;
        /*switch(cod)
        {
            case 0: ins(); break;
            case 1: sterg(); break;
            case 2: ap(); break;
            case 3: pref(); break;
        }*/
        if(cod==0) ins();
        if(cod==1) sterg();
        if(cod==2) ap();
        if(cod==3) pref();
    }
    return 0;
}