Pagini recente » Cod sursa (job #2720849) | Cod sursa (job #1423957) | Cod sursa (job #1879375) | Cod sursa (job #566352) | Cod sursa (job #388911)
Cod sursa(job #388911)
#include <algorithm>
#include <stdio.h>
#include <vector>
#define MAX 3100000
#define pb push_back
using namespace std;
vector <int> vctP[32];
char strInit[MAX];
int n, m;
int l[4], st[4];
int ast[32], bur[32];
int main()
{
freopen("lampa.in", "r", stdin);
freopen("lampa.out", "w", stdout);
scanf("%d %d\n", &n, &m);
fgets(strInit + 1, MAX, stdin);
ast[1] = bur[2] = 1;
vctP[1].pb(1);
vctP[2].pb(2);
for (int i = 3; i <= n; i++)
{
ast[i] = ast[i - 1] + ast[i - 2];
bur[i] = bur[i - 1] + bur[i - 2];
vctP[i] = vctP[i - 2];
for (int j = 0; j < vctP[i - 1].size(); j++)
vctP[i].pb(vctP[i - 1][j]);
}
for (int i = 1; i * ast[n] <= m; i++)
if ((m - ast[n] * i) % bur[n] == 0)
{
l[1] = i, l[2] = (m - ast[n] * i) / bur[n];
if (n & 1)
st[1] = 0, st[2] = l[1];
else st[1] = l[2], st[2] = 0;
int r = 0;
int ok = 1;
for (int ac = 0; ac < vctP[n].size() && ok; ac++)
{
for (int lung = 1; lung <= l[vctP[n][ac]]; lung++)
if (strInit[r + lung] != strInit[st[vctP[n][ac]] + lung])
ok = 0;
r += l[vctP[n][ac]];
}
if (ok)
{
for (int i = 1; i <= l[1]; i++)
printf("%c", strInit[st[1] + i]);
printf("\n");
for (int i = 1; i <= l[2]; i++)
printf("%c", strInit[st[2] + i]);
printf("\n");
return 0;
}
}
printf("0\n");
fclose(stdin);
fclose(stdout);
return 0;
}