Cod sursa(job #733687)

Utilizator danalex97Dan H Alexandru danalex97 Data 12 aprilie 2012 19:31:26
Problema Piese Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
using namespace std;

ifstream F("piese.in");
ofstream G("piese.out");

#define Dm 505
#define nr(x,n) n-x+1

int N,M,P;
int Rez[Dm][Dm];

inline int ln(int val,int x)
{ return ( val>x ) ? val : ln(val*2,x); }

void Acp(int x,int y,int n,int m)
{
	int v=min( ln(1,n)/2 , ln(1,m)/2 );
	int vx=x+v-1,vy=y+v-1;
	
	bool oke=false;++P;
	for (int i=x;i<=vx;++i)
		for (int j=y;j<=vy;++j)
		{
			Rez[i][j]=P;
			oke=true;
		}
	if ( !oke )
		--P;

	if ( x<=vx || y<=vy )	
	{
		if ( min( nr(x,n) - v +1 , nr(y,m) ) >  min( nr(y,m) - v +1 , nr(x,n) ) )
		{
			Acp( vx+1 , y , n - v , m );
			Acp( x , vy+1 , n - v , m - v );
		}
		else
		{
			Acp( vx+1 , y , n - v , m - v );
			Acp( x , vy+1 , n , m - v );
		}
	}
}

int main(void)
{
	F>>N>>M;
	
	Acp(1,1,N,M);
	
	for (int i=1;i<=N;++i)
	{
		for (int j=1;j<=M;++j)
			G<<Rez[i][j]<<' ';
		G<<'\n';
	}
}