Cod sursa(job #1704123)

Utilizator bleo16783FMI Bleotiu Cristian bleo16783 Data 18 mai 2016 08:31:27
Problema Trie Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 2.73 kb
#include <iostream>
#include<fstream>
#include<cstring>
using namespace std;
int x10,nr,i,j,i10,ok69,i1000,h;
char w[20];
struct trie
{
    int x,nr;
    trie *tata;
    trie *v[26];
    trie()
    {
        for(i1000=0;i1000<26;++i1000)v[i1000]=NULL;
    }
}*vf,*p,*a,*p1;
int main()
{
    ifstream f("trie.in");
    for(i=0;i<26;i++)
        {
            a=new trie;
            a->v[i]=NULL;
        }
    vf=new trie;
    vf=a;vf->x=0;
    vf->tata=NULL;
    ofstream g("trie.out");
    while(f>>x10)
    {
        f>>w;//cout<<x10<<" "<<w<<'\n';
        if(x10<1)
        {
            p=new trie;
            p=vf;i=0;h=strlen(w);
            while(p->v[w[i]-'a']!=NULL&&i<h)
            {
                p=p->v[w[i]-'a'];i++;
            }
            for(j=i;j<h;j++)
            {
                p->nr++;
                p->v[w[j]-'a']=new trie;
                p->v[w[j]-'a']->tata=p;
                p->v[w[j]-'a']->x=0;
                p=p->v[w[j]-'a'];
            }
            p->x++;
        }
        else
        {
            if(x10<2)
            {
                p=new trie;
                p=vf;i=0;h=strlen(w);
                while(i<h){p=p->v[w[i]-'a'];i++;}
                if(p->x>1)p->x--;
                else
                {
                    ok69=0;
                    for(i10=0;i10<26&&ok69<1;++i10)
                        if(p->v[i10]!=NULL)ok69=1;
                    p->x--;
                    if(ok69<1)
                    {
                        //p->x--;
                        while(p->nr<2&&p->x<1&&p->tata!=NULL)
                        {
                            i--;
                            p->nr--;p1=new trie;
                            p1=p;
                            p=p->tata;
                            p->v[w[i]-'a']=NULL;
                            delete p1;
                        }
                    }
                }
            }
            else
            {
                if(x10<3)
                {
                    p=new trie;
                    p=vf;i=0;h=strlen(w);
                    while(p->v[w[i]-'a']!=NULL&&i<h)
                    {
                        p=p->v[w[i]-'a'];i++;
                    }
                    if(i==h)g<<p->x<<'\n';
                    else g<<'0'<<'\n';
                }
                else
                {
                    p=new trie;
                    p=vf;i=0;h=strlen(w);
                    while(p->v[w[i]-'a']!=NULL&&i<h)
                    {
                        p=p->v[w[i]-'a'];i++;
                    }
                    g<<i<<'\n';
                }
            }
        }
    }
    f.close();g.close();
    return 0;
}