Pagini recente » Cod sursa (job #3280040) | Rating Dan Denisa Adriana (denisa_dan) | Cod sursa (job #3121483) | Cod sursa (job #2316) | Cod sursa (job #127319)
Cod sursa(job #127319)
#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;
}