Pagini recente » Cod sursa (job #1724412) | Cod sursa (job #591071) | Cod sursa (job #2267890) | Cod sursa (job #2826253) | Cod sursa (job #137380)
Cod sursa(job #137380)
#include <cstdio>
#include <string>
using namespace std;
const int N = 1000000;
int s,n,a,b;
char c[N];
char c1[10000], c2[10000];
string fib ( int s, int &a, int &b ) {
int v[3][2] = {{0,0}, {1,0}, {0,1}};
string ss[3] = {"", "1", "2"};
for (int i = 3; i <= s; ++i) {
v[i%3][0] = v[(i-2)%3][0] + v[(i-1)%3][0];
v[i%3][1] = v[(i-2)%3][1] + v[(i-1)%3][1];
ss[i%3] = ss[(i-2)%3] + ss[(i-1)%3];
}
a = v[s%3][0]; b = v[s%3][1];
return ss[s%3];
}
int main() {
freopen("lampa.in","rt",stdin);
freopen("lampa.out","wt",stdout);
scanf("%d %d",&s,&n);
if (n > N) {
printf("0\n");
return 0;
}
scanf("%s",c);
string ss = fib(s,a,b);
for (int x = 1; x < 2000; ++x) {
if ((n-x*a)%b == 0 && (n-x*a)/b > 0) {
int y = (n-x*a) / b;
bool wrong = false;
for (int i = 0; i < x; ++i) c1[i] = c[i];
c1[x] = '\0';
for (int i = 0; i < y; ++i) c2[i] = c[x+i];
c2[y] = '\0';
for (int i = 0, k = 0, lim = 0; i < ss.size() && !wrong; ++i) {
if (ss[i] == '1') {
lim += x;
for (int start = k; k < lim; ++k) {
if (c[k] != c1[k-start]) {
wrong = true;
break;
}
}
} else {
lim += y;
for (int start = k; k < lim; ++k) {
if (c[k] != c2[k-start]) {
wrong = true;
break;
}
}
}
}
if (!wrong) {
printf("%s\n%s\n",c1,c2);
return 0;
}
}
}
printf("0\n");
return 0;
}