Pagini recente » Cod sursa (job #1143620) | Cod sursa (job #1262534) | Cod sursa (job #883452) | Cod sursa (job #2362256) | Cod sursa (job #189490)
Cod sursa(job #189490)
#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;
}