Cod sursa(job #231479)

Utilizator nimicLeoveanu Mihaita Alexandru nimic Data 14 decembrie 2008 12:29:30
Problema Tablete Scor 100
Compilator cpp Status done
Runda Algoritmiada 2009, Runda 1, Studenti Marime 1.06 kb
#include <stdio.h>
#define NMAX 1000

int ramas, nr, n, k, mat[NMAX+10][NMAX+10], m[NMAX*NMAX+10];

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