Cod sursa(job #155328)

Utilizator za_wolfpalianos cristian za_wolf Data 11 martie 2008 21:09:50
Problema Lampa Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include<stdio.h>
#include<string.h>
#define NMAX 800000
long n,m,j,i,a,b,aa,q,bb;
char s[NMAX],s1[NMAX],s2[NMAX],s3[NMAX],null[NMAX];
long fibo(long n)
{
	long a,b,i,c;
	if (n==1) return 1;
	if (n==2) return 2;
	a=1;
	b=2;
	for (i=3;i<=n;i++)
	{
		c=a+b;
		a=b;
		b=c;
	}
	return c;

}
void afis()
{
	if (n%2==1)
	{
		for (i=0;i<=aa-1;i++)
			printf("%c",s[i]);
		printf("\n");
		for (i=aa;i<=bb+aa-1;i++)
			printf("%c",s[i]);
		printf("\n");
	}
	else

	{
		for (i=bb;i<=aa+bb-1;i++)
			printf("%c",s[i]);
		printf("\n");
		for (i=0;i<=bb-1;i++)
			printf("%c",s[i]);
		printf("\n");
	}
}
int main()
{
	freopen("lampa.in","r",stdin);
	freopen("lampa.out","w",stdout);
	scanf("%ld%ld",&n,&m);
	gets(s);
	gets(s);
	a=fibo(n-3);
	b=fibo(n-2);
	aa=-1;
	for (j=1;j<m;j++)
		if	((m-a*j)%b==0)
		{
			aa=j;
			bb=(m-a*j)/b;

			if (n%2==1)
			{
				q=-1;
				for (i=0;i<=aa-1;i++)
				{
					s1[++q]=s[i];
					s1[q+1]=NULL;
				}
				q=-1;
				for (i=aa;i<=bb+aa-1;i++)
				{
					s2[++q]=s[i];
					s2[q+1]=NULL;
				}

			}
			else

			{
				q=-1;
				for (i=bb;i<=aa+bb-1;i++)
				{
					s1[++q]=s[i];
					s1[q+1]=NULL;
				}
				q=-1;
				for (i=0;i<=bb-1;i++)
				{
					s2[++q]=s[i];
					s2[q+1]=NULL;
				}
			}


			for (i=3;i<=n;i++)
			{
				strcpy(s3,s1);
				strcat(s3,s2);
				strcpy(s1,s2);
				strcpy(s2,s3);
			}
			if (!strcmp(s,s2))
			{
				afis();
				return 0;
			}

/*			strcpy(s1,null);
			strcpy(s2,null);
			strcpy(s3,null); */

		}

		printf("0\n");


	return 0;
}