Pagini recente » Cod sursa (job #1545392) | Cod sursa (job #361067) | Cod sursa (job #2289199) | Cod sursa (job #1547667) | Cod sursa (job #182738)
Cod sursa(job #182738)
//LAMPA INFOARENA
#include <fstream.h>
#define FMAX 18
#define MMAX 3100000
ifstream fin("lampa.in");
ofstream fout("lampa.out");
unsigned long long fib[20];
unsigned long long n,m;
char A[MMAX];
unsigned long long xa,xb;
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)
{
unsigned long long i;
int ok=1;
if (p==1)
for (i=1;i<=a;i++)
if (A[s1+i-1]!=A[xa+i])
ok=0;
if (p==2)
for (i=1;i<=b;i++)
if (A[s1+i-1]!=A[xb+i])
ok=0;
if (p>2)
{
ok=verificare(a,b,s1,p-2);
unsigned long long 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()
{
unsigned long long 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)
{
unsigned long long a=i;
unsigned long long b=(m-la*i)/lb;
int ok;
if (n%2==1) xa=0, xb=a;
else xa=b, xb=0;
ok=verificare(a,b,1,n);
if (ok){
unsigned long long k;
for (k=xa+1;k<=xa+a;k++)
fout<<A[k];
fout<<'\n';
for (k=xb+1;k<=xb+b;k++)
fout<<A[k];
return;
}
}
}
fout<<'0';
}
int main()
{
fibbonaci();
solve();
fout.close();
return 0;
}