Cod sursa(job #673865)

Utilizator maritimCristian Lambru maritim Data 4 februarie 2012 23:57:55
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>
#include<fstream>
using namespace std;

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

#define MaxN 1010

int N,K,nr,A[MaxN][MaxN];

int main()
{
	f >> N >> K;
	
	for(int i=1;i<=N;i++)
		for(int j=1;j<K;j++)
			A[i][j] = ++nr;
	if((N-K)%2 == 0)
	{
		if(!(nr&1))
		{
			-- nr;
			A[N][K-1] = nr+2;
			A[1][N] = N*N-N;
			A[1][N+1] = N*N;
		}
		for(int i=1;i<=N;i++)
			for(int j=K;j<N;j++)
				if(++ nr && !A[i][j])
					A[i][j] = nr;
		for(int i=K+1;i<=N;i++)
			A[1][i] = A[1][i+1];
		for(int i=1;i<=N;i++)
			if(++ nr && !A[i][N])
				A[i][N] = nr;
	}
	else
	{
		if(!(nr&1))
			-- nr, A[1][N+1] = N*N, A[N][K-1] = nr + 2;
		for(int i=1;i<=N;i++)
			for(int j=K;j<=N;j++)
				if(++ nr && !A[i][j])
					A[i][j] = nr;
		if(A[N][N] != N*N)
			for(int i=K+1;i<=N;i++)
				A[1][i] = A[1][i+1];
	}
		
	for(int i=1;i<=N;i++,g<<"\n")
		for(int j=1;j<=N;j++)
			g << A[i][j] << " ";
	
	return 0;
}