Cod sursa(job #348501)

Utilizator Alexa_ioana_14Antoche Ioana Alexandra Alexa_ioana_14 Data 15 septembrie 2009 21:46:46
Problema Tablete Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.22 kb
#include<cstdio>
#define M 1001
short int n,m;
int a[M][M];
void citire()
{
	freopen("tablete.in","r",stdin);
	freopen("tablete.out","w",stdout);
	scanf("%hd%hd",&n,&m);
}
void matrice()
{
	int num=1;
	a[1][1]=1;
	a[2][1]=2;
	for (int i=1; i<=2; ++i)
		for (int j=2; j<m; ++j)
			a[i][j]=a[i][j-1]+2;
	a[1][m]=a[2][m-1]+2;
	a[2][m]=a[1][m]+2;
	a[3][1]=a[1][m-1]+2;
	a[3][2]=a[3][1]+2;
	a[3][3]=a[3][2]+2;
	num=a[3][3]+1;
	for (int i=3; i<=n; ++i)
	{
		for (int j=1; j<m; ++j)
			if (!a[i][j])
				if (j+1==m)
					if (num%2==0)
					{
						if (i==n)
							a[1][m+1]=num+1;
						else
							a[i+1][1]=num+1;
						a[i][j]=num;
						a[i][m]=num+2;
						num+=3;
					}
					else
					{
						a[i][j]=num;
						++num;
						a[i][m]=num;
						++num;
					}
				else
				{
					a[i][j]=num;
					++num;
				}
				else 
					if (i==3&&j==m-1)
					{
					 a[i][m]=num;
					 ++num;
					}
	}
	if (!a[1][m+1])
		a[1][m+1]=num;
	a[2][m+1]=a[n][m]+2;
	for (int i=m+2; i<=n; ++i)
	{
		a[1][i]=a[1][i-1]+2;
		a[2][i]=a[2][i-1]+2;
	}
	for (int i=3; i<=n; ++i)
		for (int j=m+1; j<=n; ++j)
			if (j==m+1)
				a[i][j]=a[i-2][n]+2;
			else
				a[i][j]=a[i][j-1]+2;
}
void mat1()
{
	int num=1;
	for (int i=1; i<=n; ++i)
	{
		for (int j=1; j<m; ++j)
			if (!a[i][j])
				if (j+1==m)
					if (num%2==0)
					{
						if (i==n)
							a[1][m+1]=num+1;
						else
							a[i+1][1]=num+1;
						a[i][j]=num;
						a[i][m]=num+2;
						num+=3;
					}
					else
					{
						a[i][j]=num;
						++num;
						a[i][m]=num;
						++num;
					}
				else
				{
					a[i][j]=num;
					++num;
				}
				else 
					if (i==3&&j==m-1)
					{
					 a[i][m]=num;
					 ++num;
					}
	}
	if (!a[1][m+1])
		a[1][m+1]=num;
	a[2][m+1]=a[n][m]+2;
	for (int i=m+2; i<=n; ++i)
	{
		a[1][i]=a[1][i-1]+2;
		a[2][i]=a[2][i-1]+2;
	}
	for (int i=3; i<=n; ++i)
		for (int j=m+1; j<=n; ++j)
			if (j==m+1)
				a[i][j]=a[i-2][n]+2;
			else
				a[i][j]=a[i][j-1]+2;
}
void afis()
{
	for (int i=1; i<=n; ++i)
	{
		for (int j=1; j<=n; ++j)
			printf("%d ",a[i][j]);
		printf("\n");
	}
}
int main()
{
	citire();
	if(m==2||m==3)
		mat1();
	else
	matrice();
	afis();
	
	
	return 0;
}