Cod sursa(job #231172)

Utilizator dragomir_danDragomir Marius Dan dragomir_dan Data 14 decembrie 2008 11:40:12
Problema Tablete Scor 100
Compilator cpp Status done
Runda Algoritmiada 2009, Runda 1, Studenti Marime 1.59 kb
#include <stdio.h>

int main()
{
	FILE* in = fopen("tablete.in", "rt");
	FILE* out = fopen("tablete.out", "wt");

	int n;
	int k;

	fscanf(in, "%d %d", &n, &k);

	if(n % 2 == 0)
	{
		for(int j = 0; j < n; j++)
		{
			for(int i = 0; i < n; i++)
			{
				if(i + 1 == k && j % 2 == 0)
					fprintf(out, "%d ", (i - 1) * n + j + 2);
				else if(i + 2 == k && j % 2 == 1)
					fprintf(out, "%d ", (i + 1) * n + j);
				else
					fprintf(out, "%d ", i * n + j + 1);
			}
			fprintf(out, "\n");
		}
	}
	else if(k % 2 == 0)
	{
		int a = 1;
		int b = k * n + 1;
		for(int i = 1; i <= n; i++)
		{
			for(int j = 1; j <= n; j++)
			{
				if(j <= k)
					fprintf(out, "%d ", a++);
				else
					fprintf(out, "%d ", b++);
			}
			fprintf(out, "\n");
		}
	}
	else
	{
		for(int i = 1; i <= n; i++)
		{
			for(int j = 1; j <= n; j++)
			{
				if(j == k)
				{
					if(i == n)
						fprintf(out, "%d ", (n - 2) * (n - k + 1) + (n - k + 1) + n * (k - 1));
					else if(i % 2 == 1)
						fprintf(out, "%d ", i * (k - 1) + j - 1);
					else
						fprintf(out, "%d ", (i - 1) * (n - k + 1) + j - k + 1 + n * (k - 1));
				}
				else if(j == k - 1)
				{
					if(i % 2 == 1)
						fprintf(out, "%d ", (i - 1) * (k - 1) + j);
					else
						fprintf(out, "%d ", (i - 2) * (n - k + 1) + j - k + 2 + n * (k - 1));
				}
				else if(j < k)
					fprintf(out, "%d ", (i - 1) * (k - 1) + j);
				else if(i == n - 1 && j == n)
					fprintf(out, "%d ", (n - 1) * (n - k + 1) + 1 + n * (k - 1));
				else
					fprintf(out, "%d ", (i - 1) * (n - k + 1) + j - k + 1 + n * (k - 1));
			}
			fprintf(out, "\n");
		}
	}

	fclose(in);
	fclose(out);
	return 0;
}