Pagini recente » Cod sursa (job #927986) | Cod sursa (job #697022) | Cod sursa (job #2253594) | Cod sursa (job #352339) | Cod sursa (job #198874)
Cod sursa(job #198874)
# include <stdio.h>
using namespace std;
# define FIN "piese.in"
# define FOUT "piese.out"
# define MAXN 501
# define min(a,b) (a < b ? a : b)
int M,N,i,j,ct,minim;
int A[MAXN][MAXN];
int put[MAXN];
void baga(int xi,int yi,int xf,int yf)
{
int a,b,c,i,j;
if (xi > N || xf > N || xi > xf) return;
if (yi > M || yf > M || yi > yf) return;
a = xf - xi + 1;
b = yf - yi + 1;
c = put[min(a,b)];
++ct;
for (i = xi; i < xi+c; ++i)
for (j = yi; j < yi+c; ++j)
A[i][j] = ct;
baga(xi,yi+c,xi+c-1,yf);
baga(xi+c,yi,xf,yf);
}
int main()
{
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d%d",&N,&M);
minim = min(N,M);
for (i = 1; i <= minim; i = i << 1)
put[i] = i;
for (i = 1; i <= minim; ++i)
if (put[i] == 0) put[i] = put[i - 1];
ct = 0;
baga(1,1,N,M);
printf("%d\n",ct);
for (i = 1; i <= N; ++i)
{
for (j = 1; j <= M; ++j)
printf("%d ",A[i][j]);
printf("\n");
}
return 0;
}