Cod sursa(job #231098)

Utilizator ProtomanAndrei Purice Protoman Data 14 decembrie 2008 11:30:27
Problema Tablete Scor 50
Compilator cpp Status done
Runda Algoritmiada 2009, Runda 1, Clasele 5-8 Marime 1.31 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

int n, nr, k;
int a[1024][1024];

int main()
{
	freopen("tablete.in","r",stdin);
	freopen("tablete.out","w",stdout);
	scanf("%ld %ld", &n, &k);
	int x = 0;
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++)
			a[i][j] = (++x);
	if ((n % 2) && !(k % 2))
		for (int i = 1; i <= n; i++)
			if (!(i % 2))
			{
				nr = a[i + 1][1];
				a[i + 1][1] = a[i][k];
				for (int j = k; j < n; j++)
					a[i][j] = a[i][j + 1];
				a[i][n] = nr;
			}
	if ((n % 2) && (k % 2))
	{
		nr = a[2][1];
		a[2][1] = a[1][k];
		for (int i = k; i < n; i++)
			a[1][i] = a[1][i + 1];
		a[1][n] = nr;
		for (int i = 3; i <= n; i++)
			if (i % 2)
			{
				nr = a[i - 1][n];
				a[i - 1][n] = a[i][1];
				for (int j = k; j; j--)
					a[i][j] = a[i][j - 1];
				a[i][1] = nr;
			}
	}
	if (!(n % 2) && (k % 2))
	{
		for (int i = 1; i <= n; i++)
			if (i % 2)
			{
				nr = a[i][k];
				for (int j = k; j < n; j++)
					a[i][j] = a[i][j + 1];
				a[i][n] = a[i + 1][k];
				for (int j = k; j; j--)
					a[i + 1][j] = a[i + 1][j - 1];
				a[i + 1][1] = nr;
			}
	}
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j < n; j++)
			printf("%ld ", a[i][j]);
		printf("%ld\n", a[i][n]);
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}