Cod sursa(job #484928)

Utilizator ChallengeMurtaza Alexandru Challenge Data 16 septembrie 2010 15:22:11
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <fstream>

using namespace std;

const char InFile[]="tablete.in";
const char OutFile[]="tablete.out";
const int MaxN=1005;

ifstream fin(InFile);
ofstream fout(OutFile);

int N,K,a[MaxN][MaxN];

inline void swap(int &a, int &b)
{
	int c=a;
	a=b;
	b=c;
}

int main()
{
	fin>>N>>K;
	fin.close();

	if(N%2==0)
	{
		if(K%2==0)
		{
			int counter=0;
			for(register int i=1;i<=N;++i)
			{
				for(register int j=1;j<=N;++j)
				{
					a[i][j]=++counter;
				}
			}
		}
		else
		{
			int counter=0;
			for(register int i=1;i<=N;++i)
			{
				for(register int j=1;j<=K;++j)
				{
					a[i][j]=++counter;
				}
			}
			for(register int i=1;i<=N;++i)
			{
				for(register int j=K+1;j<=N;++j)
				{
					a[i][j]=++counter;
				}
				if(i%2==0)
				{
					swap(a[i-1][K],a[i][1]);
				}
			}
		}
	}
	else
	{
		if(K%2==0)
		{
			int counter=0;
			for(register int i=1;i<=N;++i)
			{
				for(register int j=1;j<=K;++j)
				{
					a[i][j]=++counter;
				}
			}
			for(register int i=1;i<=N;++i)
			{
				for(register int j=K+1;j<=N;++j)
				{
					a[i][j]=++counter;
				}
			}
		}
		else
		{
			int counter=0;
			for(register int i=1;i<=N-1;++i)
			{
				for(register int j=1;j<=K;++j)
				{
					a[i][j]=++counter;
				}
				if(i%2==0)
				{
					swap(a[i-1][K],a[i][1]);
				}
			}
			for(register int j=1;j<=K;++j)
			{
				a[N][j]=++counter;
			}
			for(register int i=1;i<=N;++i)
			{
				for(register int j=K+1;j<=N;++j)
				{
					a[i][j]=++counter;
				}
			}
			swap(a[1][K+1],a[N][K]);
		}
	}

	for(register int i=1;i<=N;++i)
	{
		for(register int j=1;j<=N;++j)
		{
			fout<<a[i][j]<<" ";
		}
		fout<<"\n";
	}
	fout.close();
	return 0;
}