Pagini recente » Cod sursa (job #1193223) | Cod sursa (job #2903116) | Cod sursa (job #2762468) | Cod sursa (job #269089) | Cod sursa (job #307231)
Cod sursa(job #307231)
#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, am_sol;
char ch;
int f1[200], f2[200], f[200];
int main() {
freopen("lampa.in", "r", stdin);
freopen("lampa.out", "w", stdout);
scanf("%d %d ", &n, &m);
cin>>s;
sz = s.size() - 1;
for (i = 0; i <= sz; i++) {
ch = s[i];
f[ch]++;
}
fib[1] = fib[2] = 1;
for (i = 3; i < 40; i++)
fib[i] = fib[i - 1] + fib[i - 2];
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);
string c1, c2;
if (n % 2 == 0) {
int aux = l1;
l1 = l2;
l2 = aux;
}
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;
int aux2 = l1;
l1 = l2;
l2 = aux2;
}
// cout<<c1<<" "<<c2<<"\n";
memset(f1, 0, sizeof(f1));
memset(f2, 0, sizeof(f2));
for (i = 0; i < c1.size(); i++) {
ch = c1[i];
f1[ch]++;
}
for (i = 0; i < c2.size(); i++) {
ch = c2[i];
f2[ch]++;
}
am_sol = 1;
for (ch = 'a'; ch <= 'z'; ch++)
if (fib[n - 2] * f1[ch] + fib[n - 1] * f2[ch] != f[ch]) {
am_sol = 0;
break;
}
/* p1 = c1; p2 = c2;
for (j = 3; j <= n; j++) {
p3 = p1 + p2;
p1 = p2;
p2 = p3;
}*/
if (am_sol) {
cout<<c1<<"\n"<<c2<<"\n";
return 0;
}
if (isol1 * isol2 != 0)
i += isol2 - isol1 - 1;
}
}
if (ok)
cout<<sol1<<"\n"<<sol2<<"\n";
else
printf("0\n");
return 0;
}