Pagini recente » Cod sursa (job #2914087) | Cod sursa (job #488041) | Cod sursa (job #377788)
Cod sursa(job #377788)
#include<stdio.h>
#include<math.h>
#define DIM 505
struct ok
{
int x,y;
} c[DIM];
int n,m,k,a[DIM][DIM];
int min (int x,int y)
{
if(x>y)
return y;
return x;
}
int check (ok p,int lat)
{
if(a[p.x][p.y])
return 0;
if(p.x+lat-1>n || p.y+lat-1>m)
return 0;
return 1;
}
void fill (ok p,int lat)
{
int i,j;
for(i=p.x;i<=p.x+lat-1;++i)
for(j=p.y;j<=p.y+lat-1;++j)
a[i][j]=k+1;
}
int main ()
{
freopen("piese.in","r",stdin);
freopen("piese.out","w",stdout);
int lat,i,j,st,dr;
scanf("%d%d",&n,&m);
c[st=dr=1].x=1;
c[st].y=1;
for(;st<=dr;++st)
if(c[st].x<=n && c[st].y<=m)
for(lat=1<<((int)sqrt(min(n-c[st].x+1,m-c[st].y+1)));lat;lat/=2)
if(check(c[st],lat))
{
fill(c[st],lat);
++k;
c[++dr].x=c[st].x+lat;
c[dr].y=c[st].y;
c[++dr].x=c[st].x;
c[dr].y=c[st].y+lat;break;
}
printf("%d\n",k);
for(i=1;i<=n;++i,printf("\n"))
for(j=1;j<=m;++j)
printf("%d ",a[i][j]);
return 0;
}