Cod sursa(job #137585)

Utilizator hadesgamesTache Alexandru hadesgames Data 17 februarie 2008 12:45:34
Problema Lampa Scor 50
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasa a 9-a Marime 1.52 kb
#include <stdio.h>
#include <string.h>
int a[20],b[20];
char sir[20][100];
char c[50000],d[50000];
char s[3000000];
int main()
{
	FILE *in,*out;
	int i,j,n,m,k,k2,x,y,p,ver;
	in=fopen("lampa.in","r");
	out=fopen("lampa.out","w");
	fscanf(in,"%d%d",&n,&m);
	a[1]=1;
	a[2]=0;
	b[1]=0;
	b[2]=1;
	for (i=3;i<=n;i++)
	{
		a[i]=a[i-1]+a[i-2];
		b[i]=b[i-1]+b[i-2];
	}
	strcpy(sir[1],"a");
	strcpy(sir[2],"b");
	for (i=3;i<=n;i++)
	{
		strcpy(sir[i],sir[i-2]);
		strcat(sir[i],sir[i-1]);
	}
	fscanf(in,"%s",s);
	x=m/a[n];
	for (i=1;i<=x;i++)
	{
		if ((m-i*a[n])%b[n]==0)
		{
			if (n%2)
			{
				j=(m-i*a[n])/b[n];
				for (k=0;k<i;k++)
					c[k]=s[k];
				for (k=0;k<j;k++)
					d[k]=s[k+i];
				
			}
			else
			{
				j=(m-i*a[n])/b[n];
				for (k=0;k<j;k++)
					d[k]=s[k];
				for (k=0;k<i;k++)
					c[k]=s[k+j];
			}
			p=0;
			y=strlen(sir[n]);
			ver=1;
			for (k=0;k<y;k++)
			{
				if (sir[n][k]=='a')
				{
					for (k2=0;k2<i;k2++)
						if (s[p+k2]!=c[k2])
						{
							ver=0;
							k=y;
							break;
						}
					p+=i;
				}
				else
				{
					for (k2=0;k2<j;k2++)
						if (s[k2+p]!=d[k2])
						{
							ver=0;
							k=y;
							break;
						}
					p+=j;
				}
			}
			if (ver)
			{
				for (k=0;k<i;k++)
					fprintf(out,"%c",c[k]);
				fprintf(out,"\n");
				for (k=0;k<j;k++)
					fprintf(out,"%c",d[k]);
				fprintf(out,"\n");
				fclose(in);
				fclose(out);
				return 0;
			}
		}
	}
	fprintf(out,"\n");
	fclose(in);
	fclose(out);
	return 0;
}