Cod sursa(job #471575)

Utilizator darrenRares Buhai darren Data 19 iulie 2010 15:22:11
Problema Tablete Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <fstream>

using namespace std;

const int SIZE = 1001;

ifstream fin("tablete.in");
ofstream fout("tablete.out");

void Read();
void Solve();
void Write();

int n, k;
int a[SIZE][SIZE];

int main()
{
	Read();
	Solve();
	Write();
}

void Read()
{
	fin >> n >> k;
}

void Solve()
{
	int now = 0;
	if (k % 2 == 0)
	{
		for (int i = 1; i <= n; ++i)
			for (int j = 1; j <= k; ++j)
				a[i][j] = ++now;
		for (int i = 1; i <= n; ++i)
			for (int j = k + 1; j <= n; ++j)
				a[i][j] = ++now;
	}
	else
		if (n % 2 == 0)
		{
			for (int i = 1; i <= n; i += 2)
			{
				for (int j = 1; j < k; ++j)
					a[i][j] = ++now;
				a[i][k] = now + 2;
				a[i + 1][1] = ++now;
				++now;
				for (int j = 2; j <= k; ++j)
					a[i + 1][j] = ++now;
			}
			for (int i = 1; i <= n; ++i)
				for (int j = k + 1; j <= n; ++j)
					a[i][j] = ++now;
		}
		else
		{
			for (int i = 1; i < n; i += 2)
			{
				for (int j = 1; j < k; ++j)
					a[i][j] = ++now;
				a[i][k] = now + 2;
				a[i + 1][1] = ++now;
				++now;
				for (int j = 2; j <= k; ++j)
					a[i + 1][j] = ++now;
			}
			a[n][1] = ++now; ++now;
			for (int j = 2; j < k; ++j)
				a[n][j] = ++now;
			a[n][k] = a[n][1] + 1;
				
			for (int i = 1; i <= n; ++i)
				for (int j = k + 1; j <= n; ++j)
					a[i][j] = ++now;
		}
}

void Write()
{
	for (int i = 1; i <= n; ++i)
	{
		for (int j = 1; j <= n; ++j)
			fout << a[i][j] << ' ';
		fout << '\n';
	}
}