Cod sursa(job #179454)
#include <stdio.h>
FILE *f,*g;
long n,m,a[505][505],pus,i,j;
void executa(long slin,long lin,long scol,long col)
{
long i,j,k;
k=0;
while(((1<<k)<=(lin-slin+1))&&((1<<k)<=(col-scol+1)))
k++;
k=1<<k-1;
for(i=slin;i<slin+k;i++)
for(j=scol;j<scol+k;j++)
a[i][j]=pus;
pus++;
if((slin+k-1)!=lin)
executa(slin+k,lin,scol,scol+k-1);
if((scol+k-1)!=col)
executa(slin,lin,scol+k,col);
}
long main()
{
f=fopen("piese.in","r");
g=fopen("piese.out","w");
fscanf(f,"%ld %ld\n",&n,&m);
pus=1;
executa(1,n,1,m);
fprintf(g,"%ld\n",pus-1);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
fprintf(g,"%ld ",a[i][j]);
fprintf(g,"\n");
}
fclose(f); fclose(g);
return 0;
}