Pagini recente » Cod sursa (job #1469844) | Cod sursa (job #355525) | Cod sursa (job #554466) | Profil M@2Te4i | Cod sursa (job #120800)
Cod sursa(job #120800)
#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;
}