Pagini recente » Cod sursa (job #923103) | Cod sursa (job #2169032) | Cod sursa (job #1414042) | Cod sursa (job #1059003) | Cod sursa (job #304110)
Cod sursa(job #304110)
#include <stdio.h>
int fib[30],i,n,m,j,sol;
char cuv[3030000],a[30000],b[30000],ordine[200000];
void verif (int lna, int lnb)
{
int i,j=0,ln,k=0;
if (n%2==1){
for (i=1;i<=lna;i++) a[i]=cuv[i];
for (i=1;i<=lnb;i++) b[i]=cuv[i+lna];
}
else {
for (i=1;i<=lnb;i++) b[i]=cuv[i];
for (i=1;i<=lna;i++) a[i]=cuv[i+lnb];
}
for (i=1;i<=fib[n];i++){
ln=1;
if (ordine[i]=='A')
while (ln<=lna){
if (a[ln]!=cuv[j+ln]) return;
ln++;
}
if (ordine[i]=='B')
while (ln<=lnb){
if (b[ln]!=cuv[j+ln]) return;
ln++;
}
j=j+ln-1;
}
a[lna+1]=0, b[lnb+1]=0;
printf ("%s\n%s\n",a+1,b+1);
sol=1;
}
int main ()
{
freopen ("lampa.in","r",stdin);
freopen ("lampa.out","w",stdout);
scanf ("%d %d\n",&n,&m);
scanf ("%s",cuv+1);
fib[1]=fib[2]=1;
for (i=3;i<=n;i++) fib[i]=fib[i-1]+fib[i-2];
ordine[fib[n]]='B', ordine[fib[n]-1]='A', i=4;
while (i<=n){
for (j=fib[n]-fib[i]+1;j<=fib[n]-fib[i-1];j++)
ordine[j]=ordine[j+fib[i-1]];
i++;
}
for (i=1;i<=m;i++){
if ( m - i * fib[n-2] <= 0 || sol==1) break;
if ( (m-i*fib[n-2])%fib[n-1]==0 ) verif ( i , (m-i*fib[n-2])/fib[n-1]);
}
if (sol==0) printf ("0");
return 0;
}