Cod sursa(job #2823830)

Utilizator lolismekAlex Jerpelea lolismek Data 29 decembrie 2021 20:52:52
Problema Lampa Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#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;
}