Pagini recente » Cod sursa (job #3264599) | Cod sursa (job #608157) | Cod sursa (job #2618220) | Cod sursa (job #2932708) | Cod sursa (job #1000629)
#include<stdio.h>
#include<string>
#define maxn 30
using namespace std;
FILE*f=fopen("lampa.in","r");
FILE*g=fopen("lampa.out","w");
int n,lung,starta,startb;
int a[maxn],b[maxn],l[100];
char sir[3100000];
string conf[maxn],sola,solb;
inline bool check ( const int &x , const int &y ){
startb = lung-y+1;
if ( n&1 ) starta = 1;
else starta = 1+y;
l['a'] = x; l['b'] = y;
int p = 0;
for ( int i = 1 ; i <= lung ; ){
char ch = conf[n][p];
if ( ch == 'a' ){
for ( int j = i ; j <= i+l[ch]-1 ; ++j ){
if ( sir[j] != sir[starta+j-i] ) return 0;
}
}
else{
for ( int j = i ; j <= i+l[ch]-1 ; ++j ){
if ( sir[j] != sir[startb+j-i] ) return 0;
}
}
i += l[ch]; ++p;
}
sola.reserve(l['a']);
for ( int i = 1 ; i <= l['a'] ; ++i ){
sola.push_back(sir[starta+i-1]);
}
solb.reserve(l['b']);
for ( int i = 1 ; i <= l['b'] ; ++i ){
solb.push_back(sir[startb+i-1]);
}
return 1;
}
int main () {
fscanf(f,"%d %d\n",&n,&lung);
fscanf(f,"%s",sir+1);
a[1] = b[2] = 1; conf[1] = "a"; conf[2] = "b";
for ( int i = 3 ; i <= 25 ; ++i ){
a[i] = a[i-1]+a[i-2];
b[i] = b[i-1]+b[i-2];
conf[i] = conf[i-2] + conf[i-1];
}
int solutie = 0;
for ( int x = 1 ; a[n]*x <= lung ; ++x ){
if ( !((lung-a[n]*x)%b[n]) ){
int y = (lung-a[n]*x)/b[n];
if ( check(x,y) ){
solutie = 1;
break ;
}
}
}
if ( solutie ){
fprintf(g,"%s\n%s\n",sola.c_str(),solb.c_str());
}
else{
fprintf(g,"0\n");
}
fclose(f);
fclose(g);
return 0;
}