Cod sursa(job #182908)

Utilizator stefanrStefan Ruseti stefanr Data 21 aprilie 2008 14:32:46
Problema Lampa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<fstream.h>
ifstream fin("lampa.in");
ofstream fout("lampa.out");

char s[3027198],a[100000],b[100000],v[2][100000];
int n,m,fib[26];

int incearca(int la,int lb)
{int i,j,g;
 if(n%2==0)
  {for(i=0;i<lb;i++) b[i]=s[i];
   b[lb]=0;
   for(i=0;i<la;i++) a[i]=s[i+lb];
   a[la]=0;
  }
 else
  {for(i=0;i<la;i++) a[i]=s[i];
   a[la]=0;
   for(i=0;i<lb;i++) b[i]=s[i+la];
   b[lb]=0;
  }
 i=2;
 j=la+lb;
 while(i<fib[n])
  {if(v[n%2][i]=='a')
    {for(g=0;g<la;g++)
      if(a[g]!=s[j+g]) return 0;
     j+=la;
    }
   else
    {for(g=0;g<lb;g++)
      if(b[g]!=s[j+g]) return 0;
     j+=lb;
    }
   i++;
  }
 return 1;
}

void cat(char x[100000],char y[100000],int i)
 {for(int j=0;j<fib[i-1];j++) x[j+fib[i-2]]=y[j];
  x[j]=0;
 }

int main()
{fin>>n>>m;
fin>>s;
int i,la,lb,ok;
v[1][0]='a';
v[0][0]='b';
fib[1]=1;
fib[2]=1;
for(i=3;i<=n;i++)
 {cat(v[i%2],v[(i-1)%2]);
  fib[i]=fib[i-2]+fib[i-1];
 }
la=1;
ok=0;
do
 {if((m-fib[n-2]*la)%fib[n-1]==0)
   {lb=(m-fib[n-2]*la)/fib[n-1];
    ok=incearca(la,lb);
   }
  la++;
 }while(!ok);
fout<<a<<"\n";
fout<<b;
fin.close();
fout.close();
}