Cod sursa(job #127319)

Utilizator dominoMircea Pasoi domino Data 23 ianuarie 2008 18:55:07
Problema Piese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>

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

int N, M, A[MAX_N][MAX_N], cnt;

void solve(int i1, int j1, int i2, int j2)
{
    int i, j, k, size = min(i2-i1+1, j2-j1+1);

    if (i2 < i1 || j2 < j1) return;
    for (k = 0; (1<<(k+1)) <= size; ++k);
    ++cnt;
    for (i = i1; i < i1+(1<<k); ++i)
        for (j = j1; j < j1+(1<<k); ++j)
            A[i][j] = cnt;
    solve(i1+(1<<k), j1, i2, j2);
    solve(i1, j1+(1<<k), i1+(1<<k)-1, j2);
}

int main(void)
{
    int i, j;

    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);

    scanf("%d %d", &N, &M);
    solve(0, 0, N-1, M-1);

    printf("%d\n", cnt);
    for (i = 0; i < N; ++i)
    {
        for (j = 0; j < M; ++j)
            printf("%d ", A[i][j]);
        printf("\n");
    }

    return 0;
}