Cod sursa(job #359253)

Utilizator jupanubv92Popescu Marius jupanubv92 Data 26 octombrie 2009 14:04:54
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<stdio.h>
#include<string.h>
#define Nmx 51

int n;
char rad,in[Nmx],pre[Nmx],inf[Nmx],st[Nmx],dr[Nmx];
int nr;

void citire()
{
    fgets(pre,Nmx,stdin);
    rad=pre[0];
    while(pre[strlen(pre)-1]=='\n')
      pre[strlen(pre)-1]=0;
    fgets(in,Nmx,stdin);
    while(in[strlen(in)-1]=='\n')
      in[strlen(in)-1]=0;
}

void solve(int r,int k,char In[],char Pre[])
{
    int j=0,i=nr;
    for(;j<strlen(in);++j)
      if(In[j]==r)
        break;
    if(j!=strlen(in))
       inf[i]=r;
    if(j!=0) st[i]=Pre[k+1];
    if(j!=strlen(In)-1) dr[i]=Pre[k+j+1];
    char P[Nmx];
    memset(P,0,sizeof(P)); strncpy(P,In,j);
    if(st[i])
      {++nr;solve(st[i],k+1,P,Pre);}
    if(dr[i])
      {++nr;solve(dr[i],j+1,In+j+1,Pre);}
}

void afis()
{
    for(int i=0;i<strlen(in);++i)
      {printf("%c ",inf[i]);
      if(st[i]==0) printf("* ");
       else printf("%c",st[i]);
      if(dr[i]==0) printf("* \n");
       else printf("%c \n",dr[i]);
      }
}

int main()
{
    freopen("arbore.in","r",stdin);
    freopen("arbore.out","w",stdout);
    citire();
    solve(rad,0,in,pre);
    afis();
    return 0;
}