Cod sursa(job #2113653)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 24 ianuarie 2018 21:15:52
Problema Lampa Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("lampa.in");
struct fibonacci
{
    int na, nb;
    char ord[10002];
} f[32];
int n, m, ka, kb, poza[10002], pozb[10002];
char s[3200000];
inline 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;
}
int main()
{
    int i, p, j, maxla, lb, curent, lmt;
    freopen("lampa.out","w",stdout);
    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(i==5)
                i++,i--;
            if(verif(i,lb))
            {
                for(p=poza[1]; p<=poza[1]+i-1; p++)
                    printf("%c",s[p]);
                printf("%c",'\n');
                for(p=pozb[1]; p<=pozb[1]+lb-1; p++)
                    printf("%c",s[p]);
                printf("%c",'\n');
                return 0;
            }
        }
    printf("%d",0);
    printf("%c",'\n');
    return 0;
}