Cod sursa(job #533071)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 12 februarie 2011 23:38:15
Problema Tablete Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include<fstream>
#include<algorithm>
#define NMAX 1004

using namespace std;

int a[NMAX][NMAX], n, k;

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

void Citeste()
{
	f>>n>>k;
}

void Umple1()
{
	int i, j;
	for (i=1; i<=n; ++i)
	{
		for (j=1; j<=n; ++j)
			g<<(i-1)*n+j<<" ";
		g<<"\n";
	}
}

void Umple2()
{
	int i, j, L;
	for (i=1; i<=n; ++i)
	{
		a[i][n]=(i-1)*n+1;
		for (j=1, L=(i-1)*n+2; j<n; ++j, ++L)
			a[i][j]=L;
	}
}

void Scrie()
{
	int i, j;
	for (i=1; i<=n; ++i)
	{
		g<<a[i][1];
		for(j=2; j<=n; ++j)
			g<<" "<<a[i][j];
		g<<"\n";
	}
}

void Inverseaza()
{
	int i, j;
	for (i=1, j=n; i<=n; ++i)
		swap(a[i][j], a[j][i]);
}

void Modifica2()
{
	swap(a[k][1], a[n][k]);
}

void Umple3()
{
	int i, j;
	for (i=1; i<=n; ++i)
		if (i%2==1)
			for (j=1; j<=n; ++j)
				a[i][j]=(i-1)*n+j;
		else
		{
			a[i][n]=(i-1)*n+1;
			for (j=1; j<n; ++j)
				a[i][j]=(i-1)*n+j+1;
		}
}

void Umple4()
{
	int i, j;
	for (i=1; i<=n; ++i)
		if (i%2==0 || i==n) 
			for (j=1; j<=n; ++j)  a[i][j]=(i-1)*n+j;
		else 
		{
			a[i][n]=(i-1)*n+1;
			for (j=1; j<n; ++j)
				a[i][j]=(i-1)*n+j+1;
		}
}

void Modifica4()
{
	swap(a[n][k], a[k][1]);
}

void Solve()
{
	if (n%2==0)
		if (k%2==0) Umple1();
			else 
			{ 
				Umple2(); 
				Inverseaza();
				Modifica2();
				Scrie();
			}
	else
		if (k%2==0) 
		{
			Umple3();
			Inverseaza();
		}
		else
		{
			Umple4();
			Inverseaza();
			Modifica4();
			Scrie();
		}
}

int main()
{
	Citeste();
	
	Solve();
	
	f.close();
	g.close();
	return 0;
}