Cod sursa(job #189490)

Utilizator Mishu91Andrei Misarca Mishu91 Data 14 mai 2008 21:42:24
Problema Piese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>
#define MAX_N 501

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

void cover(int, int, int, int);
inline int min(int a, int b);

int main()
{
    freopen("piese.in","rt",stdin);
    freopen("piese.out","wt",stdout);

    scanf("%d %d",&N,&M);
    cover(1,1,N,M);

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

void cover(int x1, int y1, int x2, int y2)
{
    if(x1 > x2 || y1 > y2)
        return;
    int k, n = min(x2 - x1 + 1, y2 - y1 + 1);
    for(k = 1; k <= n; k <<= 1);
    k >>= 1;
    ++act;
    for(int i = 0; i < k; ++i)
        for(int j = 0; j < k; ++j)
            A[x1 + i][y1 + j] = act;
    cover(x1, y1 + k, x1 + k - 1, y2);
    cover(x1 + k, y1, x2, y2);
}

inline int min(int a, int b)
{
    return (a < b)? a : b;
}