Pagini recente » Diferente pentru utilizator/veleandu intre reviziile 10 si 79 | Profil zepus | secretsanta | Istoria paginii utilizator/2taylorc6685xdhm1 | Cod sursa (job #485280)
Cod sursa(job #485280)
#include <fstream>
using namespace std;
const char InFile[]="piese.in";
const char OutFile[]="piese.out";
const int MaxN=505;
ifstream fin(InFile);
ofstream fout(OutFile);
int n,m,a[MaxN][MaxN],c=0;
void put(int i, int j, int l)
{
++c;
for(register int x=i;x<i+l;++x)
{
for(register int y=j;y<j+l;++y)
{
a[x][y]=c;
}
}
}
void solve(int x1, int y1, int x2, int y2)
{
if(x1>x2 || y1>y2)
{
return;
}
if(x1<1 || x1>n)
{
return;
}
if(x2<1 || x2>n)
{
return;
}
if(y1<1 || y1>m)
{
return;
}
if(y2<1 || y2>m)
{
return;
}
int k=1;
int xx=x2-x1+1;
int yy=y2-y1+1;
int min=xx;
if(min>yy)
{
min=yy;
}
while(k<=min)
{
k*=2;
}
k/=2;
put(x1,y1,k);
solve(x1,y1+k,x2,y2);
solve(x1+k,y1,x2,y1+k-1);
}
int main()
{
fin>>n>>m;
fin.close();
solve(1,1,n,m);
fout<<c<<"\n";
for(register int i=1;i<=n;++i)
{
for(register int j=1;j<=m;++j)
{
fout<<a[i][j]<<" ";
}
fout<<"\n";
}
fout.close();
return 0;
}