Pagini recente » Cod sursa (job #837883) | Cod sursa (job #2845780) | Cod sursa (job #89946) | Cod sursa (job #2202029) | Cod sursa (job #147705)
Cod sursa(job #147705)
#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;
freopen("lampa.in","r",stdin);
freopen("lampa.out","w",stdout);
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();
scanf("%d%d",&n,&m);
gets(S);
gets(S);
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++)
printf("%c",S[l]);
printf("\n");
for (l=0; l<b; l++)
printf("%c",S[l+a]);
printf("\n");
return 0;
}
}
else;
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++)
printf("%c",S[l+b]);
printf("\n");
for (l=0; l<b; l++)
printf("%c",S[l]);
printf("\n");
return 0;
}
}
else;
fclose(stdin);
fclose(stdout);
return -1;
}