Cod sursa(job #2091538)

Utilizator petru.ciocirlanPetru Ciocirlan petru.ciocirlan Data 19 decembrie 2017 20:07:15
Problema Lampa Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <bits/stdc++.h>
#define in "lampa.in"
#define out "lampa.out"
#define MN 32
#define MM 3<<20
using namespace std;
int N, M, CF[MN];
char S[MM], Aux[MM], A[MM], B[MM], *p;

int main()
{
    assert(freopen(in, "r", stdin));
    assert(freopen(out,"w", stdout));
    assert(scanf("%d%d%s", &N, &M, S+1));
    CF[1] = CF[2] = 1;
    for(int i = 3; i <= N; CF[i]=CF[i-2]+CF[i-1], ++i);
    int Acf = CF[N-2], Bcf = CF[N-1];
    for(int aln = 1; Acf*aln < M; ++aln)
    {
        if((M-Acf*aln) % Bcf == 0)
        {
            int bln = (M-Acf*aln)/Bcf;
            /*
            for(int j = 1; j <= i; ++j)
                printf("%c", S[j]);
            printf(" ");
            for(int j = i+1; j <= i+bnd; ++j)
                printf("%c", S[j]);
            printf("\n");
            */
            p = S+1;
            if(N&1)
            {
                strncpy(A, p, aln), A[aln] = '\0';
                p += aln;
                strncpy(B, p, bln), B[bln] = '\0';
                strcpy(Aux, A);
                strcat(Aux, B);
            }
            else
            {
                strncpy(B, p, bln), B[bln] = '\0';
                p += bln;
                strncpy(A, p, aln), A[aln] = '\0';
                strcpy(Aux, B);
                strcat(Aux, A);
            }
            p = S+1;
            if(!strncmp(p, Aux, aln+bln))
            {
                p += aln+bln;
                if(strncmp(p, A, aln) && strncmp(p, B, bln)) continue;
                if(strcmp(A, B)>0) swap(A, B);
                assert(printf("%s\n%s\n", A, B));
                return 0;
            }
        }
    }
    fclose(stdin), fclose(stdout);
    return 0;
}