Cod sursa(job #73543)

Utilizator moga_florianFlorian MOGA moga_florian Data 19 iulie 2007 14:20:44
Problema Pavare2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.94 kb
#include<stdio.h>
#define Nmax 105

int CA[Nmax][Nmax],CN[Nmax][Nmax];

int main()
{
FILE *fin=fopen("pavare2.in","r"),
     *fout=fopen("pavare2test.out","w");
     
int N,A,B,K,i,j,k;
fscanf(fin,"%d%d%d%d",&N,&A,&B,&K);

if(K==1) for(;;);

CA[N][1]=1;
CN[N][1]=1;

for(i=N;i;i--)
  {
  //alb
  for(j=2;j<=A;j++)
     CA[i][j] = CA[i+1][j-1];
  for(j=1;j<=B;j++)
     CA[i][1] += CN[i+1][j];
  
  //negru
  for(j=2;j<=B;j++)
     CN[i][j] = CN[i+1][j-1];
  for(j=1;j<=A;j++)
     CN[i][1] += CA[i+1][j];    
  }
  
for(j=A-1;j;j--) CA[1][j] += CA[1][j+1];
CN[1][0] = CA[1][1];
for(j=1;j<=B;j++) CN[1][j] += CN[1][j-1];

for(i=2;i<=N;i++)
  {
  for(j=A-1;j;j--) CA[i][j] += CA[i][j+1];
  for(j=2;j<=B;j++) CN[i][j] += CN[i][j-1];
  }
  
fprintf(fout,"%d\n",CN[1][B]);

//prima valoare
int ult;

i=1;
  for(j=A;j;j--)
     if(CA[i][j] >= K)
       break;
       
  if(j == 0)
    {
    for(j=1;j<=B;j++)
       if(CN[i][j] >= K)
          break;      
          
    for(k=1;k<=j;k++)
      fprintf(fout,"1"); 
    ult=1;
    K-=CN[i][j-1];
    i+=j;    
    }      
  else
    {
    for(k=1;k<=j;k++)
      fprintf(fout,"0");
    ult=0;
    K-=CA[i][j+1];
    i+=j;              
    }


for(;i<=N;i++)
  if(ult)
   {//caut alb
    for(j=A;j;j--)
      if(CA[i][j] >= K)
         break;
         
    for(k=1;k<=j;k++) fprintf(fout,"0");
    K-=CA[i][j+1];
    i+=j-1;
    ult=0;
   }    
  else
   {//caut negru
    for(j=1;j<=B;j++)
      if(CN[i][j] >= K)
        break;
        
    for(k=1;k<=j;k++) fprintf(fout,"1");
    K-=CN[i][j-1];
    i+=j-1;
    ult=1;
   }

fprintf(fout,"\n\n");

 
for(i=1;i<=N;i++)
  {
  for(j=1;j<=A;j++)
    fprintf(fout,"%d ",CA[i][j]);
  fprintf(fout,"\n");
  }
fprintf(fout,"\n\n");

for(i=1;i<=N;i++)
  {
  for(j=1;j<=B;j++)
    fprintf(fout,"%d ",CN[i][j]);
  fprintf(fout,"\n");
  }  

fclose(fin);
fclose(fout);
return 0;
}