Cod sursa(job #2254246)

Utilizator flibiaVisanu Cristian flibia Data 4 octombrie 2018 22:02:05
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("tablete.in");
ofstream out("tablete.out");

int n, k, sol[1010][1010];
bitset <1001 * 1001> viz;

int main(){
	in >> n >> k;
	int v = 0;
	int cnt = 0;
	int flag = 1;
	for(int i = (k - 1) * n + 1; i <= n * n; i++)
		if(i % 2 == 0 && cnt < n){
			if(flag){
				v = i;
				flag = 0;
			}
			cnt++;
		} 
	for(int i = 1; i <= n; i++, v += 2)
		sol[i][k] = v, viz[v] = 1;
	if(sol[n][k] == n * n){
		viz[sol[n][k]] = 0;
		for(int i = 1; i <= n; i++)
			sol[i][k] -= 2;	
		viz[sol[1][k]] = 1;
	}
	int p = 1;
	for(int i = 1; i <= n; i++)
		for(int j = 1; j < k; j++){
			while(viz[p])
				p++;
			sol[i][j] = p;
			viz[p] = 1;
		}	
	for(int i = 1; i <= n; i++)
		for(int j = k + 1; j <= n; j++){
			while(viz[p])
				p++;
			sol[i][j] = p;
			viz[p] = 1;
		}
	if(sol[1][k] > sol[1][k + 1]){
		swap(sol[1][k], sol[1][k + 1]);
		swap(sol[1][k], sol[n][k - 1]);
	}
	for(int i = 1; i <= n; i++, out << '\n')
		for(int j = 1; j <= n; j++)
			out << sol[i][j] << ' ';
	return 0;
}