Cod sursa(job #138659)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 18 februarie 2008 23:17:34
Problema Lampa Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<stdio.h>
#include<string.h>
long int n,m,i,fib[30],a,b,pas;
char cuv[3027200],cuv1[100000],cuv2[100000],aa[100000],bb[100000],*p1,*p2,*paux,*p,*pc;
int main()
{
	FILE *f,*g;f=fopen("lampa.in","r");g=fopen("lampa.out","w");
	fscanf(f,"%ld%ld",&n,&m);
	fscanf(f,"%s",cuv);
	cuv1[0]='A';cuv2[0]='B';p1=cuv1;p2=cuv2;
	for(i=3;i<=n;i++)
	{strcat(p1,p2);paux=p1;p1=p2;p2=paux;}
	p=p2;
	fib[1]=1;fib[2]=1;
	for(i=3;i<=28;i++)fib[i]=fib[i-1]+fib[i-2];
	a=1;while((m-a*fib[n-2])%fib[n-1])a++;
	b=(m-a*fib[n-2])/fib[n-1];
	pas=fib[n]-2;
	while(b)
	{  paux=p;pc=cuv;
	   if(*paux=='A')
	   { strncpy(aa,pc,a);aa[a]=0;pc+=(char)a;paux++;
	     strncpy(bb,pc,b);bb[b]=0;pc+=(char)b;paux++;
	   }
	   else
	   { strncpy(bb,pc,b);bb[b]=0;pc+=(char)b;paux++;
	     strncpy(aa,pc,a);aa[a]=0;pc+=(char)a;paux++;
	   }
	   for(i=1;i<=pas;i++)
	   { if(*paux=='A'&&!(strncmp(pc,aa,a))){pc+=(char)a;paux++;continue;}
	     if(*paux=='B'&&!(strncmp(pc,bb,b))){pc+=(char)b;paux++;continue;}
             break;
	   }
           if(i==pas+1){fprintf(g,"%s\n%s\n",aa,bb);fcloseall();return 0;}
	   a+=fib[n-1];b-=fib[n-2];
	}
	fprintf(g,"0\n");
	fcloseall();
	return 0;
 }