Cod sursa(job #1632369)

Utilizator bleo16783FMI Bleotiu Cristian bleo16783 Data 6 martie 2016 03:17:17
Problema Trie Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 2.08 kb
#include <iostream>
#include<fstream>
#include<cstring>
using namespace std;
int x,nr,i,j;
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>>x)
    {
        f>>w;
        if(x<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++;}
            //cout<<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++;//cout<<p->x<<" ";
            //delete p;
        }
        else
        {
            if(x<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
                {
                    p->x--;
                    while(p->nr<2&&p->x<1&&p->tata!=NULL)
                    {
                        i--;
                        p->nr--;//cout<<w[i];
                        p=p->tata;
                        p->v[w[i]-'a']=NULL;
                    }
                }
            }
            else
            {
                if(x<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++;}
                    g<<p->x<<'\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();
    /*x=0;
    for(i=0;i<26;i++){if(vf->v[i]!=NULL){x++;cout<<(char)(i+'a')<<" ";}}
    cout<<'\n'<<x;*/
    return 0;
}