Cod sursa(job #393952)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 10 februarie 2010 11:21:28
Problema Pavare2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<stdio.h>
#include<cstring>

int i,j,n,A,B,k[105],a[105][105][105],b[105][105][105],rez[105];
char c[105];

void add(int A[], int B[])
{
      int i, t = 0;
      for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
              A[i] = (t += A[i] + B[i]) % 10;
      A[0] = i - 1;
}

void copy(int a[],int b[])
{
	for(int i=1;i<=b[0];++i) a[i]=b[i];
	a[0]=b[0];
}

void s(int rez[])
{
	for(int i=rez[0];i>0;--i) printf("%d",rez[i]);
	printf("\n");
}
	
	

int main()
{
	freopen("pavare2.in","r",stdin);
	freopen("pavare2.out","w",stdout);
	
	scanf("%d %d %d\n",&n,&A,&B);
	scanf("%s",c+1);
	k[0]=strlen(c+1);
	if(c[k[0]]=='\n') k[0]--;
	
	for(i=k[0];i>0;--i) k[k[0]-i+1]=c[i]-'0';
	
	a[1][1][0]=1;
	a[1][1][1]=1;
	
	b[1][1][0]=1;
	b[1][1][1]=1;
	
	
	
	for(i=2;i<=n;++i) 
	{
		for(j=1;j<=B;++j) add(a[i][1],b[i-1][j]);
		for(j=2;j<=A;++j) copy(a[i][j],a[i-1][j-1]);
		
		for(j=1;j<=A;++j) add(b[i][1],a[i-1][j]);
		for(j=2;j<=B;++j) copy(b[i][j],b[i-1][j-1]);
	}
	
	for(i=1;i<=A;++i) add(rez,a[n][i]);
	for(i=1;i<=B;++i) add(rez,b[n][i]);
	
	for(i=rez[0];i>0;--i) printf("%d",rez[i]);
	printf("\n");
	
	int nr=0;
	for(i=1;i<=n;++i)
	{
		if(nr<=A) 
		{
			printf("0");
			++nr;
		}
		else 
		{
			printf("1");
			nr=0;
		}
	}
	
	printf("\n");
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}