Pagini recente » Borderou de evaluare (job #486093) | Borderou de evaluare (job #1897424) | Borderou de evaluare (job #720632) | Borderou de evaluare (job #2067761) | Cod sursa (job #2113688)
#include <bits/stdc++.h>
using namespace std;
FILE *fin = fopen("lampa.in", "r"), *fout = fopen("lampa.out", "w");
struct fibonacci{
int na, nb;
char ord[100002];
}f[32];
int n, m, ka, kb, poza[100002], pozb[100002];
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++)
fputc(s[i], fout);
fputc('\n', fout);
for(i=pozb[1]; i<=pozb[1]+lb-1; i++)
fputc(s[i], fout);
fputc('\n', fout);
}
int main()
{
int i, j, maxla, lb, curent, lmt;
fscanf(fin, "%d%d ", &n, &m);
fgets(s, sizeof(s) , fin);
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;
}
}
fprintf(fout, "0\n");
return 0;
}