Cod sursa(job #1689799)

Utilizator bleo16783FMI Bleotiu Cristian bleo16783 Data 14 aprilie 2016 16:23:03
Problema Trie Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 2.2 kb
#include <iostream>
#include<fstream>
#include<cstring>
using namespace std;
int x10,nr,i,j,i10,ok69;
char w[20];
struct trie
{
    int x,nr;
    trie *tata;
    trie *v[26];
}*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;
            while(p->v[w[i]-'a']!=NULL&&i<strlen(w)){p=p->v[w[i]-'a'];i++;}
            for(j=i;j<strlen(w);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;
                while(i<strlen(w)){p=p->v[w[i]-'a'];i++;}
                if(p->x>1)p->x--;
                else
                {
                    ok69=0;
                    for(i10=0;i10<27;++i10)if(p->v[i10]!=NULL)ok69=1;
                    if(ok69<1)
                    {
                        p->x--;
                        while(p->nr<2&&p->x<1&&p->tata!=NULL)
                        {
                            i--;
                            p->nr--;
                            p=p->tata;
                            p->v[w[i]-'a']=NULL;
                        }
                    }
                }
            }
            else
            {
                if(x10<3)
                {
                    p=new trie;
                    p=vf;i=0;
                    while(p->v[w[i]-'a']!=NULL&&i<strlen(w)){p=p->v[w[i]-'a'];i++;}
                    if(i==strlen(w))g<<p->x<<'\n';
                    else g<<'0'<<'\n';
                }
                else
                {
                    p=new trie;
                    p=vf;i=0;
                    while(p->v[w[i]-'a']!=NULL&&i<strlen(w)){p=p->v[w[i]-'a'];i++;}
                    g<<i<<'\n';
                }
            }
        }
    }
    f.close();g.close();
    return 0;
}