Cod sursa(job #235920)
Utilizator | Data | 26 decembrie 2008 12:57:06 | |
---|---|---|---|
Problema | Lampa | Scor | 0 |
Compilator | c | Status | done |
Runda | Arhiva de probleme | Marime | 5.14 kb |
#include <stdio.h>
#include <string.h>
int fib[25]={1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6756,
10946,17702,28648};
int N,M;
int x,i,j,nr;
char s[10000];
char s1[10000];
char s2[10000];
char s3[10000];
char s4[10000];
char s5[10000];
int x1,x2;
int c,ok,nrx,ok1;
int find(int a, int b)
{
return (M-a*x1)/b;
}
int main()
{
freopen("lampa.in","r",stdin);
scanf("%d %d\n", &N,&M);
for (i=1;i<=M;++i)
scanf("%c", &s[i]);
x1=N;
freopen("lampa.out","w",stdout);
nr=3;
while (nr<=x1)
{
x=find(fib[nr-2],fib[nr-1]);
//x2=x;
if (M==x1*fib[nr-2]+fib[nr-1]*x)
if (N%2==1)
{
x2=x;
for (i=1;i<=N;++i)
{
s1[i]=s[i];
s3[i]=s[i];
}
for (j=N+1;j<=N+x;++j)
{
s2[j-N]=s[j];
s4[j-N]=s[j];
}
c=N+x;
for (i=3;i<x1;++i)
{
for (j=1;j<=N;++j)
s5[j]=s3[j];
for (j=N+1;j<=c;++j)
s5[j]=s4[j-N];
for (j=1;j<=x;++j)
s3[j]=s4[j];
N=x;
for (j=1;j<=c;++j)
s4[j]=s5[j];
x=c;
c=N+x;
}
for (j=1;j<=N;++j)
s5[j]=s3[j];
for (j=N+1;j<=c;++j)
s5[j]=s4[j-N];
ok1=0;
for (i=1;i<=M;++i)
if (s5[i]==s[i])
ok1=1;
else
{ok1=0;
break;}
if (ok1)
{
for (i=1;i<=x1;++i)
printf("%c", s1[i]);
printf("\n");
for (i=1;i<=x2;++i)
printf("%c", s2[i]);
ok=1;
break;
}
else
if (N%2==0)
{
x2=x;
for (i=1;i<=N;++i)
{
s2[i]=s[i];
s4[i]=s[i];
}
for (j=N+1;j<=N+x;++j)
{
s1[j-N]=s[j];
s3[j-N]=s[j];
}
c=N+x;
for (i=3;i<x1;++i)
{
for (j=1;j<=N;++j)
s5[j]=s3[j];
for (j=N+1;j<=c;++j)
s5[j]=s4[j-N];
for (j=1;j<=x;++j)
s3[j]=s4[j];
N=x;
for (j=1;j<=c;++j)
s4[j]=s5[j];
x=c;
c=N+x;
}
for (j=1;j<=N;++j)
s5[j]=s3[j];
for (j=N+1;j<=c;++j)
s5[j]=s4[j-N];
ok1=0;
for (i=1;i<=M;++i)
if (s5[i]==s[i])
ok1=1;
else
{ok1=0;
break;}
if (ok1)
{
for (i=1;i<=x1;++i)
printf("%c", s1[i]);
printf("\n");
for (i=1;i<=x2;++i)
printf("%c", s2[i]);
ok=1;
break;
}
}
if (ok1) break;
}
nr++;
}
if (!ok) printf("-1\n");
return 0;
}