Pagini recente » Cod sursa (job #3187576) | Cod sursa (job #2331495) | Cod sursa (job #1591121) | Cod sursa (job #2131849) | Cod sursa (job #2003185)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("lampa.in" );
ofstream out("lampa.out");
int dp[3][26];
string str, x, y, z;
bool solve(int l1, int l2, int n)
{
int p = 0, p1, p2;
if (n & 1)
p1 = 0, p2 = l1;
else
p1 = l2, p2 = 0;
for (char ch : y) {
if (ch == '1') {
if (str.compare(p, l1, str, p1, l1))
return false;
else
p += l1;
} else {
if (str.compare(p, l2, str, p2, l2))
return false;
else
p += l2;
}
}
return true;
}
int main(void)
{
int n, m;
in >> n >> m >> str;
dp[1][1] = dp[2][2] = 1;
for (int i = 3; i <= n; ++i) {
dp[1][i] = dp[1][i - 2] + dp[1][i - 1];
dp[2][i] = dp[2][i - 2] + dp[2][i - 1];
if (dp[1][i] + dp[2][i] > str.length()) {
out << 0;
return 0;
}
}
x = '1'; y = '2';
for (int i = 3; i <= n; ++i) {
z = x + y;
x = y; y = z;
}
for (int l2 = (int) str.length() / dp[2][n]; l2; --l2) {
int l1 = (int) (str.length() - dp[2][n] * l2) / dp[1][n];
if (l1 * dp[1][n] + l2 * dp[2][n] == str.length() && solve(l1, l2, n)) {
if (n & 1)
out << str.substr(0, l1) << "\n" << str.substr(l1, l2);
else
out << str.substr(l2, l1) << "\n" << str.substr(0, l2);
return 0;
}
}
out << 0;
return 0;
}