Cod sursa(job #231323)

Utilizator CezarMocanCezar Mocan CezarMocan Data 14 decembrie 2008 12:07:36
Problema Tablete Scor 100
Compilator cpp Status done
Runda Algoritmiada 2009, Runda 1, Clasele 5-8 Marime 1.4 kb
#include <cstdio>

using namespace std;

int n, k, i, j, v[1010][1010], x[10010], t, p, np;

int main() {
	freopen("tablete.in", "r", stdin);
	freopen("tablete.out", "w", stdout);
	
	scanf("%d%d", &n, &k);
	np = n * n;
	
	if (n % 2 == 1) {
		t = 1;
		for (i = 1; i <= n; i++)
			for (j = 1; j <= n; j++) 
				if (j != k) {
					v[i][j] = t;
					t += 2;
					if (t == np) {
						i = n + 1;
						j = n + 1;
					}
				}
				else {
					v[i][j] = v[i][j - 1] + 1;
					x[0]++; 
					x[x[0]] = v[i][j];
				}
		
		p = 2; t = 1;			
		for (i = (n + 1) / 2 + 1; i <= n; i++)
			for (j = 1; j <= n; j++) {
				v[i][j] = p;
				p += 2;
				while (p == x[t] && t <= x[0]) {
					p += 2;
					t++;
				}
			}
			
		v[n][n] = np;		
	}
	
	else {
		if (k % 2 == 0) {
			t = 1;
			for (i = 1; i <= n; i++)
				for (j = 1; j <= n; j++) {
					v[i][j] = t;
					t++;
				}
		}
		else {
			t = 1;
			for (i = 1; i <= n; i += 2) {
				v[i][1] = t + 1;
				v[i + 1][1] = t;
				v[i][n] = t + 2 * n - 1;
				v[i + 1][n] = v[i][n] - 1;
				t += 2 * n;
			}
			
			for (i = 1; i <= n; i++)
				if (i % 2 == 1)
					for (j = 2; j < n; j++)
						v[i][j] = v[i][j - 1] + 1;
				else
					for (j = n - 1; j > 1; j--)
						v[i][j] = v[i][j + 1] - 1;
		}
	}
			
	
	for (i = 1; i <= n; i++) {
		for (j = 1; j <= n; j++)
			printf("%d ", v[i][j]);
		printf("\n");
	}
	return 0;
}