Cod sursa(job #133189)

Utilizator DITzoneCAdrian Diaconu DITzoneC Data 7 februarie 2008 20:29:55
Problema Lampa Scor Ascuns
Compilator cpp Status done
Runda Marime 1.15 kb
#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <string>

using namespace std;

#define FOR(i,s,d) for(i=(s);i<(d);++i)

char s[3027198];
string A,B,C;
int n,m,a,b;

void doit(int a,int b)
{
	int i,k=a+b;
	FOR(i,2,A.size())
		if(A[0]=='1')
			if(A[i]=='1')
				if(memcmp(s,s+k,a))
					return ;
				else
					k+=a;
			else
				if(memcmp(s+a,s+k,b))
					return ;
				else
					k+=b;
		else
			if(A[i]=='1')
				if(memcmp(s+b,s+k,a))
					return ;
				else
					k+=a;
			else
				if(memcmp(s,s+k,b))
					return ;
				else
					k+=b;
	if(A[0]=='1')
	{
		FOR(i,0,a)
			printf("%c",s[i]);
		printf("\n");
		FOR(i,a,a+b)
			printf("%c",s[i]);
		printf("\n");
	}
	else
	{
		FOR(i,b,a+b)
			printf("%c",s[i]);
		printf("\n");
		FOR(i,0,b)
			printf("%c",s[i]);
		printf("\n");
	}
	exit(0);
}

int main()
{
	int i;
	assert(freopen("lampa.in","r",stdin));
	freopen("lampa.out","w",stdout);
	assert(scanf("%d %d",&n,&m)==2);
	assert(scanf("%s",s)==1);
	assert(strlen(s)==m);
	a=1,b=0;
	A="1", B="2";
	FOR(i,1,n)
	{
		if(i!=n-1)
			C=A+B;
		A=B;
		B=C;
		b+=a;
		a=b-a;
	}
	FOR(i,1,m/a+1)
	{
		if((m-i*a)%b==0)
			doit(i,(m-i*a)/b);
	}
	printf("0\n");
	return 0;
}