Pagini recente » Cod sursa (job #2150626) | Cod sursa (job #231322) | Cod sursa (job #1038301) | Cod sursa (job #2268027) | Cod sursa (job #1778803)
#include <cstdio>
#define NMax 3027200
#define Type 2000
int f1[Type+1];
int f2[Type+1];
int f3[Type+1];
int fib[Type+1];
char s[NMax+1];
int main(){
freopen("lampa.in","r",stdin);
freopen("lampa.out","w",stdout);
int k,i,j,M,N,A,B,iA,iB,idx,ok=0;
scanf("%d %d\n",&N,&M);
fgets(s, NMax-1, stdin);
fib[1] = 1;
fib[2] = 1;
for(i = 3; i <= N; ++i) fib[i] = fib[i-1] + fib[i-2];
f1[0] = f2[0] = 1; f1[1] = 1; f2[1] = 2;
for(i = 3; i <= N; ++i)
{
for(j = 1; j <= f1[0]; ++j) f3[j] = f1[j];
for(j = 1; j <= f2[0]; ++j) f3[ j+f1[0] ] = f2[j];
f3[0] = f1[0] + f2[0];
for(j = 0; j <= f2[0]; ++j) f1[j] = f2[j];
for(j = 0; j <= f3[0]; ++j) f2[j] = f3[j];
}
for(k = 1; k * fib[N-2] < M; ++k)
if( ( M - k * fib[N-2] ) % fib[N-1] == 0 )
{
A = k;
B = ( M - k * fib[N-2] ) / fib[N-1];
if( N%2 ) { iA = 0; iB = A; }
else { iB = 0; iA = B; }
for(idx = 0, i = 1; i <= f2[0]; ++i)
if( f2[i] == 1 )
{
for(j = iA; j < iA+A; ++j)
if( s[idx++] ^ s[j] ) { j = iA+A; i = f2[0]+2; }
}
else
{
for(j = iB; j < iB+B; ++j)
if( s[idx++] ^ s[j] ) { j = iB+B; i = f2[0]+2; }
}
if( i == f2[0]+1 ) { ok = 1; break; }
}
if(!ok) printf("0\n");
else
{
for(i = iA; i < iA + A; ++i) printf("%c", s[i]);
printf("\n");
for(i = iB; i < iB + B; ++i) printf("%c", s[i]);
}
return 0;
}