Cod sursa(job #233510)

Utilizator AthanaricCirith Gorgor Athanaric Data 18 decembrie 2008 00:27:08
Problema Tablete Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#define N 1000
int n,k,a[N][N];
void Normal()
{
	for (int i=1; i<=n; i++)
	{
		for (int j=1; j<=n; j++)
			printf("%d ",(i-1)*n+j);
		printf("\n");
	}
}
void Configure()
{
	for (int x=1; x<=n/2; x++)
	{
		for (int j=1; j<=k-1; j++)
			a[2*(x-1)+1][j]=j+2*k*(x-1);
		a[2*(x-1)+1][k]=k+1+2*k*(x-1);
		for (int j=1; j<=k-1; j++)
			a[2*x][j]=k+2*(j-1)+2*k*(x-1);
		a[2*x][k]=2*k+2*k*(x-1);
	}
}
void NotsoNormal()
{
	int nr=0;
	for (int i=1; i<=n; i++)
		for (int j=1; j<=k; j++)
			a[i][j]=++nr;
}
void LastLine()
{
	for (int j=1; j<=k-1; j++)
		a[n][j]=n*k-k+j;
	a[n][k]=n*k+1;
}
int Solve()
{
	int max;
	scanf("%d%d",&n,&k);
	if (n%2==0&&k%2==0)
	{
		Normal();
		return 0;
	}
	if (n%2==1&&k%2==0)
		NotsoNormal();
	if (n%2==0&&k%2==1)
		Configure();
	if (n%2==1&&k%2==1)
	{
		Configure();
		LastLine();
	}
	max=a[n][k];
	for (int j=k+1; j<=n; j++)
		for (int i=1; i<=n; i++)
			a[i][j]=++max;
	for (int i=1; i<=n; i++)
	{
		for (int j=1; j<=n; j++)
			printf("%4d",a[i][j]);
		printf("\n");
	}
	return 0;
}
int main()
{
	freopen("tablete.in","r",stdin);
	freopen("tablete.out","w",stdout);
	Solve();
}