Cod sursa(job #127292)

Utilizator filipbFilip Cristian Buruiana filipb Data 23 ianuarie 2008 18:38:52
Problema Piese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>

#define minim(a, b) ((a < b) ? a : b)

int M, N, D[505], T[505][505], cnt;

void f(int x1, int y1, int x2, int y2)
{
    int k = D[minim(x2-x1+1, y2-y1+1)];
    int i, j, l = (1<<k);

    if (x1 > x2 || y1 > y2)
        return ;

    ++cnt;
    for (i = x1; i < x1+l; i++)
        for (j = y1; j < y1+l; j++)
            T[i][j] = cnt;
        
    f(x1, y1+l, x1+l-1, y2);
    f(x1+l, y1, x2, y2);
}

int main(void)
{
    int i, j;

    freopen("piese.in", "r", stdin);
    freopen("piese.out", "w", stdout);
        
    scanf("%d %d", &M, &N);

    for (i = 1, j = 0; i < 502; i++)
    {
        if ((1<<(j+1)) <= i)
            j++;
        D[i] = j;
    }

    f(1, 1, M, N);

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

    return 0;
}