Pagini recente » Cod sursa (job #847964) | Cod sursa (job #2932545) | Cod sursa (job #3171379) | Cod sursa (job #395583) | Cod sursa (job #481869)
Cod sursa(job #481869)
#include <algorithm>
#include <bitset>
using namespace std;
#define MAX 3100000
#define LOG 30
char s[MAX],s1[MAX],s2[MAX];
bitset <MAX> viz;
int f[LOG];
int n,m;
void read ()
{
scanf ("%d%d\n",&n,&m);
fgets (s+1,MAX,stdin);
}
int final (int n1,int n2)
{
int i,j,k;
if (n&1)
for (i=1; i<=n1 || i<=n2; ++i)
{
if (i<=n1)
s1[i]=s[i];
else
s1[i]=0;
if (i<=n2)
s2[i]=s[i+n1];
else
s2[i]=0;
}
else
for (i=1; i<=n1 || i<=n2; ++i)
{
if (i<=n1)
s1[i]=s[i+n2];
else
s1[i]=0;
if (i<=n2)
s2[i]=s[i];
else
s2[i]=0;
}
for (i=1, j=0; i<f[n]; ++i, j+=k-1)
if (!viz[i])
{
for (k=1; k<=n1; ++k)
if (s1[k]!=s[j+k])
return 0;
}
else
{
for (k=1; k<=n2; ++k)
if (s2[k]!=s[j+k])
return 0;
}
s1[n1+1]=s2[n2+1]='\0';
printf ("%s\n%s",s1+1,s2+1);
return 1;
}
void solve ()
{
int i,j;
f[1]=f[2]=1;
for (i=3; i<=n; ++i)
f[i]=f[i-1]+f[i-2];
viz[f[n]]=1;
for (i=4; i<=n; ++i)
for (j=f[n]-f[i]+1; j<=f[n]-f[i-1]; ++j)
viz[j]=viz[j+f[i-1]];
for (i=1; i*f[n-2]<=m; ++i)
if ((m-i*f[n-2])%f[n-1]==0)
if (final (i,(m-i*f[n-2])/f[n-1]))
return ;
printf ("0\n");
}
int main ()
{
freopen ("lampa.in","r",stdin);
freopen ("lampa.out","w",stdout);
read ();
solve ();
return 0;
}