Pagini recente » Cod sursa (job #1236550) | Cod sursa (job #2732615) | Cod sursa (job #876173) | Cod sursa (job #1163209) | Cod sursa (job #2823841)
#include <iostream>
#include <fstream>
using namespace std;
#pragma GCC optimize ("Ofast")
ifstream fin("lampa.in");
ofstream fout("lampa.out");
const int N = 25;
int fib[N + 1];
int main(){
ios_base::sync_with_stdio(false);
int n, m;
string s = "";
fin >> n >> m;
for(int i = 0; i < m; i++){
char ch;
fin.get(ch);
s += ch;
}
fib[1] = fib[2] = 1;
for(int i = 3; i <= N; i++) fib[i] = fib[i - 2] + fib[i - 1];
/*
structuri(n >= 4, care din enunt oricum este):
> n % 2 = 1 : 122
> n % 2 = 0 : 212
*/
// idee optimizare: mergem doar in multipli de fib[n - 1] -> nu merge???
string c1, c2;
for(int i = 1; i <= m; i++){
int len1 = i;
if( ( m - (len1 * fib[n - 2]) ) % fib[n - 1] == 0 ){
int len2 = ( m - (len1 * fib[n - 2]) ) / fib[n - 1];
c1 = c2 = "";
if(n & 1){
for(int j = 0; j < len1 && j < m; j++) c1 += s[j];
for(int j = 0; j < len2 && len1 + j < m; j++) c2 += s[len1 + j];
}else{
for(int j = 0; j < len2 && j < m; j++) c2 += s[j];
for(int j = 0; j < len1 && len2 + j < m; j++) c1 += s[len2 + j];
}
string c_test = "";
for(int j = 0; j < len2 && len1 + len2 + j < m; j++) c_test += s[len1 + len2 + j];
if(c2 == c_test){
fout << c1 << '\n' << c2;
return 0;
}
}
if(( m - (len1 * fib[n - 2]) ) / fib[n - 1] == 0) break;
}
fout << 0;
return 0;
}