Pagini recente » Cod sursa (job #450234) | Cod sursa (job #684702) | Cod sursa (job #778619) | Cod sursa (job #2398793) | Cod sursa (job #182908)
Cod sursa(job #182908)
#include<fstream.h>
ifstream fin("lampa.in");
ofstream fout("lampa.out");
char s[3027198],a[100000],b[100000],v[2][100000];
int n,m,fib[26];
int incearca(int la,int lb)
{int i,j,g;
if(n%2==0)
{for(i=0;i<lb;i++) b[i]=s[i];
b[lb]=0;
for(i=0;i<la;i++) a[i]=s[i+lb];
a[la]=0;
}
else
{for(i=0;i<la;i++) a[i]=s[i];
a[la]=0;
for(i=0;i<lb;i++) b[i]=s[i+la];
b[lb]=0;
}
i=2;
j=la+lb;
while(i<fib[n])
{if(v[n%2][i]=='a')
{for(g=0;g<la;g++)
if(a[g]!=s[j+g]) return 0;
j+=la;
}
else
{for(g=0;g<lb;g++)
if(b[g]!=s[j+g]) return 0;
j+=lb;
}
i++;
}
return 1;
}
void cat(char x[100000],char y[100000],int i)
{for(int j=0;j<fib[i-1];j++) x[j+fib[i-2]]=y[j];
x[j]=0;
}
int main()
{fin>>n>>m;
fin>>s;
int i,la,lb,ok;
v[1][0]='a';
v[0][0]='b';
fib[1]=1;
fib[2]=1;
for(i=3;i<=n;i++)
{cat(v[i%2],v[(i-1)%2]);
fib[i]=fib[i-2]+fib[i-1];
}
la=1;
ok=0;
do
{if((m-fib[n-2]*la)%fib[n-1]==0)
{lb=(m-fib[n-2]*la)/fib[n-1];
ok=incearca(la,lb);
}
la++;
}while(!ok);
fout<<a<<"\n";
fout<<b;
fin.close();
fout.close();
}