Pagini recente » Cod sursa (job #1080467) | Cod sursa (job #1712395) | Cod sursa (job #418134) | Cod sursa (job #2733613) | Cod sursa (job #182725)
Cod sursa(job #182725)
//LAMPA INFOARENA
#include <fstream.h>
#define FMAX 18
#define MMAX 3100000
ifstream fin("lampa.in");
ofstream fout("lampa.out");
unsigned long long fib[20];
int n,m;
char A[MMAX];
void fibbonaci()
{
int i;
fib[1]=fib[2]=1;
for (i=3;i<=FMAX;i++)
fib[i]=fib[i-1]+fib[i-2];
}
int verificare(int a,int b,int s1,int p)
{
int i;
int ok=1;
if (p==1)
for (i=1;i<=a;i++)
if (A[s1+i-1]!=A[i])
ok=0;
if (p==2)
for (i=1;i<=b;i++)
if (A[s1+i-1]!=A[a+i])
ok=0;
if (p>2)
{
ok=verificare(a,b,s1,p-2);
int z;
if (p-2==1) z=a;
if (p-2==2) z=b;
if (p-2>2) z=a*(fib[p-4])+b*(fib[p-3]);
ok=ok&&verificare(a,b,s1+z,p-1);
}
return ok;
}
void solve()
{
int i;
fin>>n>>m;
unsigned long long la=fib[n-2],lb=fib[n-1];
for (i=1;i<=m;i++)
fin>>A[i];
for (i=1;i<=m;i++)
{
if ((m-la*i)%lb==0)
{
int a=i;
int b=(m-la*i)/lb;
int ok;
ok=verificare(a,b,1,n);
if (ok){
int k;
for (k=1;k<=a;k++)
fout<<A[k];
fout<<'\n';
for (k=a+1;k<=a+b;k++)
fout<<A[k];
return;
}
}
}
fout<<'0';
}
int main()
{
fibbonaci();
solve();
fout.close();
return 0;
}