Pagini recente » Cod sursa (job #367279) | Cod sursa (job #1564320) | Cod sursa (job #458221) | Cod sursa (job #2365559) | Cod sursa (job #154623)
Cod sursa(job #154623)
#include <stdio.h>
#include <string.h>
#define MAXN 26
#define MAXM 3027200
int F[MAXN]={0,1,1},n,m;
char *v[MAXN];
char S[MAXM];
void fib()
{
int i;
for (i=3; i<MAXN; i++)
{
F[i]=F[i-1]+F[i-2];
v[i]=new char [F[i]+2];
memset(v[i],0,sizeof(v[i]));
strcat(v[i],v[i-2]);
strcat(v[i],v[i-1]);
}
}
int main()
{
int i,j,a,b,ok,k,l;
FILE *in = fopen("lampa.in","r");
FILE *out = fopen("lampa.out","w");
v[1]=new char [3];
v[1][0]='a'; v[1][1]=0; v[1][2]=0;
v[2]=new char [3];
v[2][0]='b'; v[2][1]=0; v[2][2]=0;
fib();
fscanf(in,"%d%d",&n,&m);
fgets(S,MAXM-1,in);
fgets(S,MAXM-1,in);
if (n%2==1)
for (i=1; i*F[n-2]<m; i++)
{
if ((m-i*F[n-2])%F[n-1]==0)
{
a=i; b=(m-i*F[n-2])/F[n-1]; ok=1; k=a+b;
for (j=2; j<F[n] && ok; j++)
{
if (v[n][j]=='a')
{
for (l=0; l<a && ok; l++,k++)
if (S[k]!=S[l])
ok=0;
}
if (v[n][j]=='b')
{
for (l=0; l<b && ok; l++,k++)
if (S[k]!=S[a+l])
ok=0;
}
}
if (ok)
{
for (l=0; l<a; l++)
fprintf(out,"%c",S[l]);
fprintf(out,"\n");
for (l=0; l<b; l++)
fprintf(out,"%c",S[l+a]);
fprintf(out,"\n");
return 0;
}
}
}
else
for (i=1; i*F[n-2]<m; i++)
{
if ((m-i*F[n-2])%F[n-1]==0)
{
a=i; b=(m-i*F[n-2])/F[n-1]; ok=1; k=a+b;
for (j=2; j<F[n] && ok; j++)
{
if (v[n][j]=='a')
{
for (l=0; l<a && ok; l++,k++)
if (S[k]!=S[l+b])
ok=0;
}
if (v[n][j]=='b')
{
for (l=0; l<b && ok; l++,k++)
if (S[k]!=S[l])
ok=0;
}
}
if (ok)
{
for (l=0; l<a; l++)
fprintf(out,"%c",S[l+b]);
fprintf(out,"\n");
for (l=0; l<b; l++)
fprintf(out,"%c",S[l]);
fprintf(out,"\n");
return 0;
}
}
}
fprintf(out,"0\n");
fclose(stdin);
fclose(stdout);
return 0;
}