Cod sursa(job #231056)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 14 decembrie 2008 11:22:39
Problema Tablete Scor 100
Compilator cpp Status done
Runda Algoritmiada 2009, Runda 1, Studenti Marime 1.82 kb
#include<stdio.h>
int n,k;
long v[1001][1001];     // v[1001][1001];


void read()
{
freopen("tablete.in","r",stdin);
freopen("tablete.out","w",stdout);
scanf("%d%d",&n,&k);
}


void rez()
{
int i,j;
long nr=0,lim=0;
if((k&1) && ((n&1)==0))    // n par,  k impar
	{
	v[2][1]=1;
	nr=1;
	for(j=1;j<n;j++)
		v[1][j]=++nr;
	for(j=2;j<=n;j++)
		v[2][j]=++nr;
	v[1][n]=++nr;

	for(i=1;i<n;i=i+2)
		{
		for(j=1;j<=n;j++)
			printf("%ld ",v[1][j]+lim);
		printf("\n");
		for(j=1;j<=n;j++)
			printf("%ld ",v[2][j]+lim);
		printf("\n");
		lim=lim+n+n;
		}
	return;
	}
if(((k&1)==0) && (n&1))  //n impar,  k par
	{
	nr=0;
	for(j=1;j<=n;j++)
		v[1][j]=++nr;
	v[3][1]=++nr;
	for(j=1;j<=n;j++)
		v[2][j]=++nr;
	for(j=2;j<=n;j++)
		v[3][j]=++nr;

	for(j=1;j<=n;j++)
		printf("%ld ",v[1][j]);
	printf("\n");
	for(i=2;i<=n;i=i+2)
		{
		for(j=1;j<=n;j++)
			printf("%ld ",v[2][j]+lim);
		printf("\n");
		for(j=1;j<=n;j++)
			printf("%ld ",v[3][j]+lim);
		printf("\n");
		lim=lim+n+n;
		}
	return;
	}
if((n&1) && (k&1))
	{
	v[2][1]=1;
	v[1][1]=2;
	nr=2;
	for(j=2;j<=n;j++)
		v[1][j]=++nr;
	for(j=2;j<=n;j++)
		v[2][j]=++nr;

	lim=0;
	for(i=3;i<n;i=i+2)
		{
		lim=lim+n+n;
		for(j=1;j<=n;j++)
			printf("%ld ",v[1][j]+lim);
		printf("\n");
		for(j=1;j<=n;j++)
			printf("%ld ",v[2][j]+lim);
		printf("\n");
		}

	nr=(long)n*n-n;
	for(j=2;j<=n;j++)
		v[n][j]=++nr;
	v[n][1]=v[1][n];
	v[1][n]=(long)n*n;

	for(j=1;j<=n;j++)
		printf("%ld ",v[1][j]);
  printf("\n");
	for(j=1;j<=n;j++)
		printf("%ld ",v[2][j]);
	printf("\n");
	for(j=1;j<=n;j++)
		printf("%ld ",v[n][j]);
	printf("\n");

	return;
	}
if(((n&1)==0) && ((k&1)==0))
	{
	for(i=1;i<=n;i++)
		{
		for(j=1;j<=n;j++)
			printf("%ld ",++nr);
		printf("\n");
		}
	}
}


int main()
{
read();
rez();
return 0;
}