Pagini recente » Cod sursa (job #3004735) | Cod sursa (job #642467) | Cod sursa (job #1502223) | Cod sursa (job #396143) | Cod sursa (job #30712)
Cod sursa(job #30712)
# include <stdio.h>
int n,a,b;long long int k;
const int MAXN=100;
long long c[MAXN+1][2];
void citire()
{
FILE *f=fopen("pavare2.in","r");
fscanf(f,"%d%d%d%lld",&n,&a,&b,&k);
fclose(f);
}
int min (int a, int b) {if (a>b) return b; return a;}
void calculeaza()
{
int i,j;
c[0][1]=c[0][0]=1;
for (i=1;i<=n;i++)
{
for (j=1;j<=min(a,i);j++) c[i][0]+=c[i-j][1];
for (j=1;j<=min(b,i);j++) c[i][1]+=c[i-j][0];
}
}
void scrie()
{
FILE *g=fopen("pavare2.out","w");
fprintf(g,"%lld\n",c[n][1]+c[n][0]);
/// scrie solutia
int x=n,nr0=0,nr1=0,j;
while (k&&x)
{
if (c[x][0]>=k) {fprintf(g,"0");x--;nr0++;nr1=0;}
else {fprintf(g,"1");k-=c[x][0];x--;nr1++;nr0=0;}
if (nr0)
{
c[x][0]=0;
for (j=1;j<=min(a-nr0,x);j++) c[x][0]+=c[x-j][1];
}
else
{
c[x][1]=0;
for (j=1;j<=min(b-nr1,x);j++) c[x][1]+=c[x-j][0];
}
}
fprintf(g,"\n");
fcloseall();
}
int main()
{
citire();
calculeaza();
scrie();
return 0;
}