Cod sursa(job #230665)

Utilizator vlad_DVlad Dumitriu vlad_D Data 14 decembrie 2008 10:06:42
Problema Tablete Scor 100
Compilator cpp Status done
Runda Algoritmiada 2009, Runda 1, Studenti Marime 1.7 kb
#include <fstream>

using namespace std;
int main() {
	ifstream fin("tablete.in");
	ofstream fout("tablete.out");
	int n, k;
	fin >> n >> k;
	if (n % 2 == 0 && k % 2 == 0) {
		//caz simplu afiseaza in ordine
		int i, j;
		int p = 1;
		for (i = 1; i <= n; ++i) {
			for (j = 1; j <= n; ++j) fout << p++ << " ";
			fout << '\n';

		}
		return 0;
	}
	//caz 2
	if (n % 2 == 0) {
		// k >= 3 k <= n - 1 impar
		int p = 1;
		int i, j;
		for (i = 1; i <= n + 1; ++i) if (i != k) fout << i << " ";
		fout << '\n';
		p = n + 2;
		for (i = 2; i < n - 1; ++i) {
		    for (j = 1; j <=n; ++j) fout << p++ << " ";
		    fout << '\n';
	  		    
		}
		//penultima
		for (j = 1; j < n; ++j) fout << p++ << " ";
		fout << n * n << " \n";
		//ultima linie
		fout << k << " ";
		for (j = 2; j <= n; ++j) fout << p++ << " ";
		fout << '\n';
		return 0;
	}
	//merge pana aci
	if (k % 2 == 0) {
		//caz simplu
		int c = n * n;
		int p = 1;
		int i, j;
		for (i = 1; i <= n; ++i) {
			for (j = 1; j < n; ++j) fout << p++ << " ";
			fout << c << " "; c--;
			fout << '\n';
		}
		return 0;
	}
	//ultimu caz k impar
	if (k % 2 == 1) {
		int c = n * n;
		int p = 1;
		int i, j;
		//prima linie
		for (i = 1; i <= n; ++i) if (i != k) fout << p++ << " "; else p++;
		fout << c << " "; fout << '\n'; c--;
		//
		for (i = 2; i < n - 1; ++i) {
			for (j = 1; j < n; ++j) fout << p++ << " ";
			fout << c << " "; c--;
			fout << '\n';
		}
		//penultima
		for (j = 1; j < n - 1; ++j) fout << p++ << " ";
		fout << c - 1 << " " << c << " "; fout << '\n'; c-=2;
		//ultima linie
		fout << k << " ";
		for (j = 2; j < n; ++j) fout << p++ << " ";
		fout << c << " "; fout << '\n'; c--;
	}
	return 0;
}