Cod sursa(job #231064)

Utilizator vlad.maneaVlad Manea vlad.manea Data 14 decembrie 2008 11:23:39
Problema Tablete Scor 100
Compilator cpp Status done
Runda Algoritmiada 2009, Runda 1, Studenti Marime 1.45 kb
#include <stdio.h>

int i, j, k, p, N;
int A[1<<10][1<<10];

int main()
{
  freopen("tablete.in", "r", stdin);
  freopen("tablete.out", "w", stdout);

  scanf("%d%d", &N, &k);

  if (N % 2 == 0)
  {
    if (k % 2 == 0)
      for (i = p = 1; i <= N; ++i)
        for (j = 1; j <= N; A[i][j] = p++, ++j);
		else
		{
			for (i = p = 1; i <= N; ++i)
				for (j = 1; j <= k; A[i][j] = p++, ++j);

			for (i = 1; i <= N; ++i, ++i)
			{
				A[i][k] += A[i+1][1];
				A[i+1][1] = A[i][k] - A[i+1][1];
				A[i][k] = A[i][k] - A[i+1][1];
			}

			for (j = k+1, p = N*k+1; j <= N; ++j)
				for (i = 1; i <= N; ++i)
					A[i][j] = p++;
		}
	}
	else 
	{
		if (k % 2 == 0)
		{
			for (i = p = 1; i <= N; ++i)
				for (j = 1; j <= k; A[i][j] = p++, ++j);

			for (j = k+1, p = N*k+1; j <= N; ++j)
				for (i = 1; i <= N; ++i)
					A[i][j] = p++;
		}
		else
		{
			for (i = p = 1; i <= N; ++i)
				for (j = 1; j <= k; A[i][j] = p++, ++j);

			for (i = 1; i < N; ++i, ++i)
			{
				A[i][k] += A[i+1][1];
				A[i+1][1] = A[i][k] - A[i+1][1];
				A[i][k] = A[i][k] - A[i+1][1];
			}

			for (A[N][k] = N*k+1, A[1][k+1] = N*k, i = 2, p = N*k+2; i <= N; A[i][k+1] = p++, ++i);

			for (j = k+2, p = A[N][k+1]+1; j <= N; ++j)
				for (i = 1; i <= N; ++i)
					A[i][j] = p++;
		}
	}

	for (i = 1; i <= N; ++i)
		for (j = 1; j <= N; ++j)
			if (j < N) 
				printf("%d ", A[i][j]);
			else 
				printf("%d\n", A[i][j]);

	return 0;
}