Cod sursa(job #2113678)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 24 ianuarie 2018 21:44:41
Problema Lampa Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("lampa.in");
ofstream fout("lampa.out");
struct fibonacci{
    int na, nb;
    char ord[50002];
}f[32];
int n, m, ka, kb, poza[50002], pozb[50002];
char s[3100000];
int verif(int la, int lb)
{
    int i, j;
    for(i=0; i<=la-1; i++)
        for(j=2; j<=ka; j++)
            if(s[poza[j]+i]!=s[poza[1]+i])
                return 0;
    for(i=0; i<=lb-1; i++)
        for(j=2; j<=kb; j++)
            if(s[pozb[j]+i]!=s[pozb[1]+i])
                return 0;
    return 1;
}
void afis(int la, int lb)
{
    int i;
    for(i=poza[1]; i<=poza[1]+la-1; i++)
        fout<<s[i];
    fout<<'\n';
    for(i=pozb[1]; i<=pozb[1]+lb-1; i++)
        fout<<s[i];
    fout<<'\n';
}
int main()
{
    int i, j, maxla, lb, curent, lmt;
    fin>>n>>m;
    fin.get();
    fin.getline(s,sizeof(s));
    f[1].na=1;
    f[2].nb=1;
    strcat(f[1].ord,"A");
    strcat(f[2].ord,"B");
    for(i=3; i<=n; i++)
    {
        f[i].na=f[i-2].na+f[i-1].na;
        f[i].nb=f[i-2].nb+f[i-1].nb;
        strcat(f[i].ord,f[i-2].ord);
        strcat(f[i].ord,f[i-1].ord);
    }
    maxla=m/f[n].na;
    for(i=1; i<=maxla; i++)
        if((m-f[n].na*i)%f[n].nb==0)
        {
            lb=(m-f[n].na*i)/f[n].nb;
            curent=0, ka=0, kb=0;
            lmt=f[n].na+f[n].nb-1;
            for(j=0; j<=lmt; j++)
                {
                if(f[n].ord[j]=='A') poza[++ka]=curent, curent+=i;
                else pozb[++kb]=curent, curent+=lb;
                if(curent>=74835)
                    i++,i--;
                }
            if(verif(i,lb))
            {
                afis(i,lb);
                return 0;
            }
        }
    fout<<0<<'\n';
    return 0;
}