Cod sursa(job #393956)
#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;
}