Cod sursa(job #323868)

Utilizator ooctavTuchila Octavian ooctav Data 13 iunie 2009 21:57:03
Problema Piese Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
// piese.cpp : Defines the entry point for the console application.
//

#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;

int n,m,a,ture=1;
int e[501][501];
int po[10],p,c,fam=0,p2;
void put()
{
	po[0]=1;
	for(int i=1;i<=9;i++)
		po[i]=2*po[i-1];
}
int main()
{
	int d=0,j;
	freopen("piese.in","r",stdin);
	freopen("piese.out","w",stdout);
	cin>>m>>n;
	a=min(n,m);
	put();
	for(int i=0;i<=9;i++)
		if(po[i]<=a)
			p=po[i];
	fam=p;
	while(d<m)
	{
		for(int i=d+1;i<=d+p;i++)
		{
			j=0;
			while(j<fam)
				if(i==d+1)
				{
					e[i][++j]=ture;
					if(j%p==0)
						ture++;
				}
				else
					e[i][++j]=e[i-1][j];
		}
		d=d+p;
		while(p>m-d)
			p=p/2;
	}

	for(int i=0;i<=9;i++)
		if(po[i]<=n-p)
			p2=po[i];
	d=0;

	while(d<m)
	{
		for(int i=d+1;i<=d+p2;i++)
		{
			j=fam;
			while(j<n)
				if(i==d+1)
				{
					e[i][++j]=ture;
					if(j%p2==0)
						ture++;
				}
				else
					e[i][++j]=e[i-1][j];
		}
		d=d+p2;
		while(p2>m-d)
			p2=p2/2;
	}
	ture--;

	cout<<ture<<endl;
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
			cout<<e[i][j]<<' ';
		cout<<endl;
	}

	return 0;
}