Cod sursa(job #13101)

Utilizator Darth_NiculusIvan Nicolae Darth_Niculus Data 5 februarie 2007 18:24:45
Problema Pavare2 Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <stdio.h>

#define max(a,b) (((a)>(b)) ? (a) : (b))
#define NMAX 101

long long i,j,n,m,A[NMAX][NMAX][1],a,b,k,kk;

/* A[i][j][0] = numerul de posibilitati de a pava i metri cu primii j albi */
/* A[i][j][1] = numerul de posibilitati de a pava i metri cu primii j negri */

int main()
{
 freopen("pavare2.in","r",stdin);
 freopen("pavare2.out","w",stdout);

 scanf("%ld%ld%ld%ld",&n,&a,&b,&kk);

 //Initializing data
/* A[0][1][0]=1; A[0][1][1]=1;*/ A[1][1][0]=1; A[1][1][1]=1;

 //Recurente

 for (i=2;i<=n;i++)
 for (j=1;j<=i;j++)
    {
     long long sum=0;
     for (k=1;k<=(i-j)|| k<=(a-j-1);k++)
        sum+=A[i-j][k][0];
     for (k=1;k<=(i-j)|| k<=b;k++)
        sum+=A[i-j][k][1];

     A[i][j][0]=sum;

     sum=0;
     for (k=1;k<=(i-j)||k<=a;k++)
        sum+=A[i-j][k][0];
     for (k=1;k<=(i-j)||k<=(b-j-1);k++)
        sum+=A[i-j][k][1];

     A[i][j][1]=sum;
    }

 int rez=0;
 for (i=1;i<=a;i++)
    rez+=A[n][i][0];
 for (i=1;i<=b;i++)
    rez+=A[n][i][1];
 printf("%ld\n",rez);

 m=n; long long ko=b;
 while (m >= 0)
      {
       for (i=1;i<=a;i++)
          {
           printf("0");
           m--;
           if (m == 0)
             break;
          }
       if (m == 0)
         break;
       if (ko > 0)
         {
          printf("1");
          ko--;
         }
       m--;
      }

 fclose(stdin);
 fclose(stdout);

 return 0;
}