Pagini recente » Cod sursa (job #2229578) | Cod sursa (job #902902) | Cod sursa (job #1083481) | Cod sursa (job #479162)
Cod sursa(job #479162)
#include<cstdio>
#include<cstring>
using namespace std;
const char iname[]="lampa.in";
const char oname[]="lampa.out";
const int maxn=3100000;
const int maxk=35000;
const int maxf=220000;
int n,i,m,fib[30],cine[maxf],j;
char s[maxn],a[maxk],b[maxk];
bool test(int x,int y)
{
int i,j=1,start;
if(n&1)
{
for(i=1;i<=x;++i)
a[i]=s[i];
for(;i<=x+y;++i)
b[i-x]=s[i];
}
else
{
for(i=1;i<=y;++i)
b[i]=s[i];
for(;i<=x+y;++i)
a[i-y]=s[i];
}
for(i=1;i<=fib[n];++i)
{
if(cine[i]==1)
for(start=1;start<=x;++start,++j)
if(a[start]!=s[j])
return false;
if(cine[i]==2)
for(start=1;start<=y;++start,++j)
if(b[start]!=s[j])
return false;
}
a[x+1]=0;
b[y+1]=0;
printf("%s\n%s\n",a+1,b+1);
return true;
}
int main()
{
freopen(iname,"r",stdin);
freopen(oname,"w",stdout);
scanf("%d%d\n",&n,&m);
fgets(s+1,sizeof(s),stdin);
fib[1]=fib[2]=1;
for(i=3;i<=n;++i)
fib[i]=fib[i-1]+fib[i-2];
cine[fib[n]]=2;
cine[fib[n]-1]=1;
for(i=3;i<n;++i)
for(j=fib[n]-fib[i+1]+1;j<=fib[n]-fib[i];++j)
cine[j]=cine[j+fib[i]];
for(i=1;i<=m;++i)
{
if(m-i*fib[n-2]<=0)
break;
if((m-i*fib[n-2])%fib[n-1]==0)
if(test(i,(m-i*fib[n-2])/fib[n-1]))
return 0;
}
printf("0\n");
}