Pagini recente » Cod sursa (job #3154565) | Cod sursa (job #2339343) | Cod sursa (job #652878) | Cod sursa (job #2894996) | Cod sursa (job #158127)
Cod sursa(job #158127)
#include <cstdio>
#include <cstring>
#include <cassert>
#include <algorithm>
using namespace std;
#define MAXN 512
int N, M, K;
int A[MAXN][MAXN];
void baga(int x1, int y1, int x2, int y2)
{
if(x2 < x1 || y2 < y1) return ;
int i, j, k, b, len = min(x2-x1+1, y2-y1+1);
for(k = 0; k <= 9; k++)
if( (1<<k) <= len ) b = k;
for(K++, i = x1; i <= x1+(1<<b)-1; i++)
for(j = y1; j <= y1+(1<<b)-1; j++)
A[i][j] = K;
baga(x1, y1+(1<<b), x2, y2);
baga(x1+(1<<b), y1, x2, y1+(1<<b)-1);
}
int main(void)
{
freopen("piese.in", "rt", stdin);
freopen("piese.out", "wt", stdout);
scanf("%d %d\n", &N, &M);
assert(N >= 1 && N <= 500);
assert(M >= 1 && M <= 500);
baga(1, 1, N, M);
int i, j;
for(printf("%d\n", K), i = 1; i <= N; i++, printf("\n"))
for(j = 1; j <= M; j++)
printf("%d ", A[i][j]);
return 0;
}