Cod sursa(job #735742)

Utilizator danalex97Dan H Alexandru danalex97 Data 17 aprilie 2012 10:40:13
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
using namespace std;

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

#define Nm 1005

int N,K;
int A[Nm][Nm];
bool Ok[Nm*Nm];

int main(void)
{
	F>>N>>K;
	
	if ( K%2==0 )
		for (int i=1;i<=N;++i)
		for (int j=1;j<=K;++j)
			A[i][j]=(i-1)*K+j,
			Ok[(i-1)*K+j]=true;
	
	if ( N%2==0 && K%2==1 )
		for (int i=1;i<=N;++i)
		{
			for (int j=1;j<=K;++j)
				A[i][j]=(i-1)*K+j,
				Ok[(i-1)*K+j]=true;
			if ( !(i%2) )
				swap(A[i][1],A[i-1][K]);
		}
	
	if ( N%2==1 && K%2==1 )
	{
		for (int i=1;i<=N-1;++i)
		{
			for (int j=1;j<=K;++j)
				A[i][j]=(i-1)*K+j,
				Ok[(i-1)*K+j]=true;
			if ( !(i%2) )
				swap(A[i][1],A[i-1][K]);
		}
		for (int i=1;i<=K-1;++i)
			A[N][i]=(N-1)*K+i,
			Ok[(N-1)*K+i]=true;
		
		A[N][K]=N*K+1;
		
		Ok[N*K+1]=true;
	}	
	
	int j=1;
	while ( Ok[j] ) ++j;
	for (int i=1;i<=N;++i)
		for (int ii=1;ii<=N;++ii)
			if ( !A[i][ii] )
			{
				A[i][ii]=j;
				Ok[j]=true;
				while ( Ok[j] ) ++j;
			}
	
	int i;
	for (i=1;i<=N;++i)
	{
		for (j=1;j<=N;++j)
			G<<A[i][j]<<' ';
		G<<'\n';
	}
}