Cod sursa(job #485280)

Utilizator ChallengeMurtaza Alexandru Challenge Data 17 septembrie 2010 19:43:23
Problema Piese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#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;
}