Cod sursa(job #1153219)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 25 martie 2014 12:24:26
Problema Trie Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 1.77 kb
#include <fstream>
#include <cstring>

using namespace std;

struct Nod
{
    int fr,nrfii;
    Nod *leg[26];
    Nod()
    {
        fr=nrfii=0;
        for(int i=0;i<26;++i)
            leg[i]=0;
    }
};
Nod *rad;
char sir[25];
int lg;

inline void Insert(char sir[])
{
    int k=0,len=strlen(sir),i;
    Nod *p=rad,*q;
    while(k<len && p!=0)
    {
        i=sir[k++]-'a';
        q=p;
        p=p->leg[i];
    }
    if(p)
        p->fr++;
    else
    {
        --k;
        for(;k<len;++k)
        {
            i=sir[k]-'a';
            p=new Nod;
            q->leg[i]=p;
            q->nrfii++;
            q=p;
        }
        q->fr++;
    }
}

inline Nod* Search(char sir[])
{
    int k=0,i,len=strlen(sir);
    lg=0;
    Nod *p=rad;
    while(k<len)
    {
        i=sir[k]-'a';
        if(p->leg[i]==0)
            return rad;
        p=p->leg[i];
        if(p->fr>0 || p->nrfii>0)
            lg=k+1;
        ++k;
    }
    if(p->fr>0)
        return p;
    return rad;
}

inline void Delete(char sir[])
{
    Nod *p=Search(sir);
    p->fr--;
}

int main()
{
    int x;
    Nod *p;
    ifstream fin("trie.in");
    ofstream fout("trie.out");
    rad=new Nod;
    while(fin>>x>>sir)
    {
        if(x==0)
            Insert(sir);
        else
            if(x==1)
                Delete(sir);
            else
                if(x==2)
                {
                    p=Search(sir);
                    if(p==rad)
                        fout<<0<<"\n";
                    else
                        fout<<p->fr<<"\n";
                }
                else
                {
                    Search(sir);
                    fout<<lg<<"\n";
                }
    }
    return 0;
}