Cod sursa(job #290553)

Utilizator bog29Antohi Bogdan bog29 Data 28 martie 2009 09:26:43
Problema Piese Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream.h>
#include<math.h>
ifstream in("piese.in");
ofstream out("piese.out");
int n,m,mat[500][500],x,y,is,js,pas;
int putere(int a,int b)
{	int sol=1,i;
	for(i=0;(1<<i)<=b;i++)
	{	if(((1<<i)&b)>0)
			sol=sol*a;
	
			a=a*a;
	}		
	return sol;
}		
void getf()
{	int i,j;
	is=-1;js=-1;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(mat[i][j]==0)
			{	is=i;js=j;
				return;
			}
}
int getpow(int is,int js)
{	int i,x,y;
	x=m-js+1;
	y=n-is+1;
	for(i=8;i>=0;i--)
	{	if((pow(2,i)<=x)&&(putere(2,i)<=y))
			return i;
			
	}	
}
void fill(int k)
{	int i,j;
	pas++;
	for(i=0;i<putere(2,k);i++)
		for(j=0;j<putere(2,k);j++)
			mat[is+i][js+j]=pas;
	
}	
int main()
{	int i,j;
	in>>n>>m;
	in.close();
	getf();
	while((is!=-1)&&(js!=-1))
	{	getf();
		fill(getpow(is,js));
		getf();
	}	
	out<<pas<<"\n";
	for(i=1;i<=n;i++)
	{	for(j=1;j<=m;j++)out<<mat[i][j]<<" ";
		out<<"\n";
	}
	out.close();
	return 0;
}