Mai intai trebuie sa te autentifici.

Cod sursa(job #233764)

Utilizator AthanaricCirith Gorgor Athanaric Data 19 decembrie 2008 09:22:03
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <stdio.h>
#define N 1000
int n,k,a[N][N],x;
void Print()
{
	for (int i=1; i<=n; i++)
	{
		for (int j=1; j<=n; j++)
			printf("%d ",a[i][j]);
		printf("\n");
	}
}
void Bestcase()
{
	int x=0;
	for (int i=1; i<=n; i++)
	{
		for (int j=1; j<=n; j++)
			printf("%d ",++x);
		printf("\n");
	}
}
void NotADifficultCompletion()
{
	int x=0;
	for (int i=1; i<=n; i++)
		for (int j=1; j<=k; j++)
			a[i][j]=++x;
	for (int i=1; i<=n; i++)
		for (int j=k+1; j<=n; j++)
			a[i][j]=++x;
	Print();
}
void WorseCompletion()
{
	for (int x=1; x<=n/2; x++)
	{
		for (int j=1; j<=k-1; j++)
			a[2*x-1][j]=2*k*(x-1)+2*j-1;
		a[2*x-1][k]=2*k*(x-1)+2*(k-1);
		for (int j=1; j<=k-2; j++)
			a[2*x][j]=2*k*(x-1)+2*j;
		a[2*x][k-1]=2*k*(x-1)+2*k-1;
		a[2*x][k]=2*k*(x-1)+2*k;
	}
	int x=a[n][k];
	for (int i=1; i<=n; i++)
		for (int j=k+1; j<=n; j++)
			a[i][j]=++x;
}
void OhWell()
{
	WorseCompletion();
	Print();
}
void LastLine()
{
	for (int j=1; j<=k-1; j++)
		a[n][j]=(n-1)*k+j;
	a[n][k]=a[n][k-1]+2;
}
void Worsecase()
{
	for (int x=1; x<=n/2; x++)
	{
		for (int j=1; j<=k-1; j++)
			a[2*x-1][j]=2*k*(x-1)+2*j-1;
		a[2*x-1][k]=2*k*(x-1)+2*(k-1);
		for (int j=1; j<=k-2; j++)
			a[2*x][j]=2*k*(x-1)+2*j;
		a[2*x][k-1]=2*k*(x-1)+2*k-1;
		a[2*x][k]=2*k*(x-1)+2*k;
	}
	LastLine();
	x=a[n][k]-1;
	a[1][k+1]=x;
	x+=1;
	for (int j=k+2; j<=n; j++)
		a[1][j]=++x;
	for (int i=2; i<=n; i++)
		for (int j=k+1; j<=n; j++)
			a[i][j]=++x;
	Print();
}
void Solve()
{
	scanf("%d%d",&n,&k);
	if (n%2==0&&k%2==0)
		Bestcase();
	if (n%2==1&&k%2==0)
		NotADifficultCompletion();
	if (n%2==0&&k%2==1)
		OhWell();
	if (n%2==1&&k%2==1)
		Worsecase();
}
int main()
{
	freopen("tablete.in","r",stdin);
	freopen("tablete.out","w",stdout);
	Solve();
}