Cod sursa(job #36832)

Utilizator m_dersidanDersidan Mihai m_dersidan Data 24 martie 2007 10:03:32
Problema Pavare2 Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
# include <stdio.h>
# include <string.h>

# define  _fin  "pavare2.in"
# define  _fout "pavare2.out"

# define  maxn	101


int n, a, b, k, K,
	w[maxn][maxn], bl[maxn][maxn],
	i, j, l, ns,
	sol[maxn], set[maxn], wh;

int main()
{
	freopen(_fin, "r", stdin);
	freopen(_fout,"w", stdout);
	
	scanf("%d%d%d%d", &n, &a, &b, &k);
	
	w[1][1]=bl[1][1]=1;
	
	for (i=2; i<=n; i++)
	{
		for (j=2; j<=a; j++) w[i][j]+=w[i-1][j-1];
		for (j=2; j<=b; j++) bl[i][j]+=bl[i-1][j-1];
		for (j=1; j<=b; j++) w[i][1]+=bl[i-1][j];
		for (j=1; j<=a; j++) bl[i][1]+=w[i-1][j];
	}
	
	for (i=1; i<=a; i++) ns += w[n][i];
	for (i=1; i<=b; i++) ns += bl[n][i];
	
	printf("%d\n", ns);
//for (K=1; K<=ns; K++)
//{
//	k=K;
//	memset(sol, 0, sizeof(sol)), memset(set, 0, sizeof(set));

	for (i=n; i>=1; i--)
	{
		for (j=a; j>=1; j--)
			if ( w[i][j] >= k ) {
				// punem o secventa 0...01
				for (l=1; l<=j; l++, i--)
					sol[i]=0, set[i]=1;
				sol[i]=set[i]=1;
				break;
			}
			else k-=w[i][j];
		
		for (j=1; j<=b; j++)
			if ( bl[i][j] >= k ) {
				for (l=1; l<=j; l++, i--)
					sol[i]=set[i]=1;
				i++;
				break;
			}
			else k-=bl[i][j];
	}
//	printf("%d\n", ns);
	for (i=n; i>=1; i--) printf("%d", sol[i]);
	printf("\n");
//}

	return 0;
}