Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Istoria paginii utilizator/tudormaxim | Diferente pentru utilizator/mihaelacismaru intre reviziile 65 si 64 | Cod sursa (job #307218)
Cod sursa(job #307218)
#include <cstdio>
#include <iostream>
using namespace std;
int n, m, i, j, k, sz, l1, l2, isol1, isol2;
string s, sol1, sol2, p1, p2, p3;
int fib[40];
int ok;
int main() {
freopen("lampa.in", "r", stdin);
freopen("lampa.out", "w", stdout);
scanf("%d %d ", &n, &m);
cin>>s;
sz = s.size() - 1;
fib[1] = fib[2] = 1;
for (i = 3; i < 40; i++)
fib[i] = fib[i - 1] + fib[i - 2];
for (i = 1; i <= m; i++)
sol1 += 'z';
// printf("%d\n", fib[30]);
for (i = 1; i * fib[n - 2] <= m; i++) {
// l1 = i;
if ((m - fib[n - 2] * i) % fib[n - 1] == 0) {
l1 = i;
l2 = (m - fib[n - 2] * l1) / fib[n - 1];
if (isol1 == 0)
isol1 = i;
else
if (isol2 == 0)
isol2 = i;
if (l2 == 0)
continue;
// printf("%d %d\n", l1, l2);
// c1.clear();
// c2.clear();
string c1, c2;
for (j = 0; j < l1; j++)
c1 += s[j];
for (j = l1; j < l1 + l2; j++)
c2 += s[j];
if (n % 2 == 0) {
string aux = c1;
c1 = c2;
c2 = aux;
}
p1 = c1; p2 = c2;
for (j = 3; j <= n; j++) {
p3 = p1 + p2;
p1 = p2;
p2 = p3;
}
if (p3 == s) {
ok = 1;
if (c1 < sol1) {
sol1 = c1;
sol2 = c2;
break;
}
}
/* if (isol1 * isol2 != 0)
i += isol2 - isol1 - 1;*/
}
}
if (ok)
cout<<sol1<<"\n"<<sol2<<"\n";
else
printf("0\n");
return 0;
}