Pagini recente » Cod sursa (job #1750595) | Cod sursa (job #2852271) | Cod sursa (job #164498) | Cod sursa (job #1506871) | Cod sursa (job #2003950)
#include<fstream>
#include<string>
using namespace std;
int n, m, i, x, y, xsol, ysol, sum, ok, j;
int fib[30];
char a[80000], b[80000], sola[80000], solb[80000], c[3030000];
string s, s1, s2;
ifstream fin("lampa.in");
ofstream fout("lampa.out");
void copiere1(char a[], int p, int u){
for(int i = p; i <= u; i++){
a[i - p + 1] = c[i];
}
}
void copiere2(char a[], char b[], int n){
for(int i = 1; i <= n; i++){
a[i] = b[i];
}
}
int comp(char a[], int n, char b[], int m){
for(int i = 1; i <= min(n, m); i++){
if(a[i] != b[i]){
if(a[i] < b[i]){
return 1;
}
return 0;
}
}
if(n < m){
return 1;
}
return 0;
}
int main(){
fin>> n >> m;
fin>> c + 1;
fib[1] = fib[2] = 1;
s1 = 'A';
s2 = 'B';
for(i = 3; i <= n; i++){
s = s1 + s2;
s1 = s2;
s2 = s;
fib[i] = fib[i - 1] + fib[i - 2];
}
for(x = 1; x * fib[n - 2] < m; x++){
y = m - x * fib[n - 2];
if(y % fib[n - 1] != 0){
continue;
}
y /= fib[n - 1];
if(s[0] == 'A'){
copiere1(a, 1, x);
sum = x;
for(i = 1; i < fib[n]; i++){
if(s[i] == 'B'){
copiere1(b, sum + 1, sum + y);
break;
}
else{
sum += x;
}
}
}
else{
copiere1(b, 1, y);
sum = y;
for(i = 1; i < fib[n]; i++){
if(s[i] == 'A'){
copiere1(a, sum + 1, sum + x);
break;
}
else{
sum += y;
}
}
}
ok = 1;
sum = 0;
for(i = 0; i < fib[n] && ok; i++){
if(s[i] == 'A'){
for(j = 1; j <= x; j++){
if(a[j] != c[sum + j]){
ok = 0;
break;
}
}
sum += x;
}
else{
for(j = 1; j <= y; j++){
if(b[j] != c[sum + j]){
ok = 0;
break;
}
}
sum += y;
}
}
if(ok == 1){
if( comp(a, x, b, y) ){
copiere2(sola, a, x);
copiere2(solb, b, y);
xsol = x;
ysol = y;
}
}
}
for(i = 1; i <= xsol; i++){
fout<< sola[i];
}
fout<<"\n";
for(i = 1; i <= ysol; i++){
fout<< solb[i];
}
fout<<"\n";
return 0;
}