Cod sursa(job #533087)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 13 februarie 2011 00:19:48
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include<fstream>
#include<algorithm>
#define NMAX 1024

using namespace std;

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


void Citeste()
{
	FILE *f;
	f=fopen("tablete.in","r");
	
	fscanf(f,"%d %d", &n,&k);
	
	fclose(f);
}

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

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()
{
	FILE *g;
	g=fopen("tablete.out","w");
	
	int i, j;
	for (i=1; i<=n; ++i)
	{
		fprintf(g,"%d", a[i][1]);
		
		for(j=2; j<=n; ++j)
			fprintf(g," %d", a[i][j]);
		
		fprintf(g,"\n");
	}
	
	fclose(g);
}

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();
			}
	else
		if (k%2==0) 
		{
			Umple3();
			Inverseaza();
		}
		else
		{
			Umple4();
			Inverseaza();
			Modifica4();
		}
	Scrie();
}

int main()
{
	Citeste();
	
	Solve();
	
	return 0;
}