Pagini recente » Cod sursa (job #1758256) | Cod sursa (job #3001766) | Cod sursa (job #1895458) | Cod sursa (job #2175420) | Cod sursa (job #1635865)
#include <fstream>
#include <string>
using namespace std;
ifstream fin("lampa.in");
ofstream fout("lampa.out");
typedef long long i64;
const int nmax= 25;
int n, m;
int fib[nmax+1];
string s, s2[nmax+1];
bool check( int a, int b ) {
if ( a*b==0 )
return 0;
int b1= 0, b2= a, e1= a-1, e2= a+b-1;
if ( n%2==0 ) {
b1= b, e1= a+b-1;
b2= 0, e2= b-1;
}
for ( int i= 0, j= 0; i<(int)s2[n].size(); ++i ) {
if ( s2[n][i]=='a' ) {
for ( int cnt= b1; cnt<=e1; ++cnt, ++j ) {
if ( s[cnt]!=s[j] )
return 0;
}
} else {
for ( int cnt= b2; cnt<=e2; ++cnt, ++j ) {
if ( s[cnt]!=s[j] )
return 0;
}
}
}
return 1;
}
int main( ) {
s2[1].push_back('a'), s2[2].push_back('b');
fib[1]= fib[2]= 1;
for ( int i= 3; i<=nmax; ++i ) {
fib[i]= fib[i-1]+fib[i-2];
s2[i]= s2[i-2];
for ( int j= 0; j<(int)s2[i-1].size(); ++j ) {
s2[i].push_back(s2[i-1][j]);
}
}
fin>>n>>m>>s;
int a= fib[n-2], b= fib[n-1], a2, x, y, ok= 0;
for ( a2= 0; a2<=b-1 && a*a2%b!=1; ++a2 ) ;
for ( x= ((i64)m*a2)%b, y= (m-a*x)/b; x*a<=m; ) {
if ( check(x, y)==1 ) {
ok= 1;
break;
}
x+= b;
y= (m-a*x)/b;
}
if ( ok==0 ) {
fout<<"0\n";
return 0;
}
if ( n%2==1 ) {
for ( int i= 0; i<x; ++i ) {
fout<<s[i];
}
fout<<"\n";
for ( int i= x; i<x+y; ++i ) {
fout<<s[i];
}
fout<<"\n";
} else {
for ( int i= y; i<x+y; ++i ) {
fout<<s[i];
}
fout<<"\n";
for ( int i= 0; i<y; ++i ) {
fout<<s[i];
}
fout<<"\n";
}
return 0;
}