Cod sursa(job #1127250)

Utilizator tytus11Trifon Titus tytus11 Data 27 februarie 2014 11:46:59
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.76 kb
#include <fstream>
#include <cstring>

using namespace std;

FILE *f=fopen("text3.in","r");
FILE *g=fopen("text3.out","w");

int a[20011],b[20011],c[20011],d[20011],hel[30],hela[30];

struct cuv
{
    char s[23];
    int nr;
};
cuv x[20011];

int main()
{
    char c1;
    int n,i,j,ok;
    n=0;
    ok=0;
    int jok;
    do
    {
        ++n;
        jok=fscanf(f,"%s",&x[n].s);
        a[n]=x[n].s[0]-'a';
        b[n]=x[n].s[strlen(x[n].s)-1]-'a';
    }
    while(jok>0);
    --n;
    fprintf(g,"%d\n",n);
    c[1]=0;
    int max=0,ovariabila=0;
    for(i=1; i<=n; ++i)
    {
        if(hel[a[i]]==0)
        {
            if(hel[b[i]]==0)
            {
                hel[b[i]]=1;
                hela[b[i]]=i;
                c[i]=hela[a[i]];
                if(hel[b[i]]>max)
                {
                    max=hel[b[i]];
                    ovariabila=i;
                }
            }
        }
        else if(hel[a[i]]>=hel[b[i]])
        {
            hel[b[i]]=hel[a[i]]+1;
            hela[b[i]]=i;
            c[i]=hela[a[i]];
            if(hel[b[i]]>max)
            {
                max=hel[b[i]];
                ovariabila=i;
            }
        }


        /*if(a[i]==b[j])
            if(c[i]<=c[j])
            {
                c[i]=c[j]+1;
                d[i]=j;
            }*/
    }
    int e;
    fprintf(g,"%d",n-max);
    i=max;
    while(i>0)
    {
        d[i]=ovariabila;
        ovariabila=c[ovariabila];
        --i;
    }
    for(i=1;i<=max;++i)
    fprintf(g,"\n%s",x[d[i]].s);
    /*while(d[e]!=0)
    {
        a[i]=e;
        --i;
        e=d[e];
    }
    a[i]=e;
    for(i=1; i<=max+1; ++i)
        fprintf(g,"%s\n",x[a[i]].s);
    */
    return 0;
}