Cod sursa(job #1835704)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 27 decembrie 2016 12:49:11
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.95 kb
#include <fstream>
#include <vector>
using namespace std;

const int nmax = 1005;

int mat[nmax][nmax];
void solve(int N, int K)
{
	if(N % 2 == 0)
	{
		if(K % 2 == 0)
		{
			int cur = 1;
			for(int i = 0;i < N;++i)
			{
				for(int j = 0;j < N;++j)
				{
					mat[i][j] = cur;
					++cur;
				}
			}
		}
		else
		{
			int cur = 2;
			for(int i = 0;i < N - 1;++i)
			{
				for(int j = 0;j < N;++j)
				{
					mat[i][j] = cur;
					++cur;
				}
			}
			
			mat[N - 1][0] = 1;
			for(int i = 1;i < N;++i)
			{
				mat[N - 1][i] = cur;
				++cur;
			}
			swap(mat[N - 1][K - 1], mat[N - 2][N - 1]);
			int i = K - 1;
			
			while(mat[N - 1][i - 1] != 1)
			{
				swap(mat[N - 1][i], mat[N - 1][i - 1]);
				--i;
			}
		}
	}
	else
	{
		if(K % 2 == 0)
		{
			int cur = 1;
			vector<int> v;
			
			for(int i = 0;i < N - 1;++i)
			{
				for(int j = 0;j < N;++j)
				{
					mat[i][j] = cur;
					++cur;
				}
				v.push_back(cur);
				++cur;
			}
			
			for(int i = 0;i < N - 1;++i)
			{
				mat[N - 1][i] = v[i];
			}
			mat[N - 1][N - 1] = N * N;
		}
		else
		{
			int cur = 2;
			vector<int> v;
			
			v.push_back(1);
			for(int i = 0;i < N - 1;++i)
			{
				for(int j = 0;j < N;++j)
				{
					mat[i][j] = cur;
					++cur;
				}
				v.push_back(cur);
				++cur;
			}
			
			for(int i = 0;i < N;++i)
			{
				mat[N - 1][i] = v[i];
			}
			
			int elem = mat[N - 1][K - 1];
			--elem;
			
			int ii, jj;
			for(int i = 0;i < N;++i)
			{
				for(int j = 0;j < N;++j)
				{
					if(mat[i][j] == elem)
					{
						ii = i;
						jj = j;
						break;
					}
				}
			}
			swap(mat[N - 1][K - 1], mat[ii][jj]);
		}	
	}
}

int main()
{
	ifstream in("tablete.in");
	ofstream out("tablete.out");
	
	int N, K;
	in >> N >> K;
	
	solve(N, K);
	for(int i = 0;i < N;++i)
	{
		for(int j = 0;j < N;++j)
		{
			out<<mat[i][j]<<" ";
		}
		out<<"\n";
	}
	in.close();
	out.close();
}