Cod sursa(job #198874)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 15 iulie 2008 17:12:06
Problema Piese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
# include <stdio.h>

using namespace std;

# define FIN "piese.in"
# define FOUT "piese.out"
# define MAXN 501
# define min(a,b) (a < b ? a : b)

int M,N,i,j,ct,minim;
int A[MAXN][MAXN];
int put[MAXN];

    void baga(int xi,int yi,int xf,int yf)
    {
         int a,b,c,i,j;
         if (xi > N || xf > N || xi > xf) return;
         if (yi > M || yf > M || yi > yf) return;
         a = xf - xi + 1;
         b = yf - yi + 1;
         c = put[min(a,b)];
         ++ct;
         for (i = xi; i < xi+c; ++i)
           for (j = yi; j < yi+c; ++j)
             A[i][j] = ct;
         baga(xi,yi+c,xi+c-1,yf);
         baga(xi+c,yi,xf,yf);
    }

    int main()
    {
        freopen(FIN,"r",stdin);
        freopen(FOUT,"w",stdout);
        
        scanf("%d%d",&N,&M);
        
        minim = min(N,M);
        for (i = 1; i <= minim; i = i << 1)
          put[i] = i;
        for (i = 1; i <= minim; ++i)
          if (put[i] == 0) put[i] = put[i - 1];
        
        ct = 0;
        baga(1,1,N,M);
        
        printf("%d\n",ct);
        for (i = 1; i <= N; ++i)
          {
               for (j = 1; j <= M; ++j)
                 printf("%d ",A[i][j]);
               printf("\n");
          }
          
        return 0;
    }