Pagini recente » Cod sursa (job #1528000) | Cod sursa (job #1611571) | Cod sursa (job #2951147) | Cod sursa (job #1278402) | Cod sursa (job #2823830)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("lampa.in");
ofstream fout("lampa.out");
const int N = 25;
int fib[N + 1];
int main(){
int n, m;
string s;
fin >> n >> m >> s;
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]
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++) c1 += s[j];
for(int j = 0; j < len2; j++) c2 += s[len1 + j];
}else{
for(int j = 0; j < len2; j++) c2 += s[j];
for(int j = 0; j < len1; j++) c1 += s[len2 + j];
}
string c_test = "";
for(int j = 0; j < len2; 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;
}