Cod sursa(job #2823836)

Utilizator lolismekAlex Jerpelea lolismek Data 29 decembrie 2021 21:10:57
Problema Lampa Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#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 >> 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], !!! exemplu cu termeni de un caracter

    string c1, c2;
    for(int i = 1; i * fib[n - 1] < m; i++){
        int x = fib[n - 1] * i;
        int len1 = (m - x) / fib[n - 1];
        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;
       }
    }
    fout << 0;
    return 0;
}