Cod sursa(job #230932)

Utilizator crusRus Cristian crus Data 14 decembrie 2008 10:59:33
Problema Tablete Scor 100
Compilator cpp Status done
Runda Algoritmiada 2009, Runda 1, Clasele 5-8 Marime 1.33 kb
#include <stdio.h>
int main(void)
{
	freopen("tablete.in","r",stdin);
	freopen("tablete.out","w",stdout);


	long n,k,i,j;

	scanf("%ld %ld",&n,&k);

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

	if (n%2==0 && k%2==1)
	{
	 long n1=0,n2=n*(k-2),n3=n*k;
	 for (i=1;i<=n;i++)
	 {
		 for (j=1;j<=n;j++)
			 if (j<k-1) printf("%ld ",++n1);
			 else
				 if (j>k) printf("%ld ",++n3);
				 else printf("%ld ",++n2);

		 printf("\n");
	 }
	}

	 if (n%2==1 && k%2==1)
	 {
		 long n1=1;
		 long n2=n*n-(n-k)*n-2*n+3;
		 long n3=n2+((n-1)*2)-1;
		 long c1=n1;
		 long c2=n2;
		 long c3=n3;

		 for (i=1;i<=n;i++)
		 {
			 for (j=1;j<=n;j++)
				 if (j<k) {printf("%ld ",n1); if (n1+1<c2) n1++; else n1+=2;}
				 else
					 if (j==k) {printf("%ld ",n2); n2+=2;}
					 else {printf("%ld ",n3); if (n3==c3) n3+=2; else n3++;}
			 printf("\n");
		 }
	 }	

	 if (n%2==1 && k%2==0)
	 {
	  long n1=1;
	  long n2=(k-1)*n+1;
	  long n3=n2+1;
	  long max3=n2+(n-1)*2;

	  for (i=1;i<=n;i++)
	  {
		  for (j=1;j<=n;j++)
			  if (j<k) printf("%ld ",n1++);
			  else if (j==k) {printf("%ld ",n2); n2+=2;}
			  else 
			  {
				  printf("%ld ",n3);
				  if (n3<max3) n3+=2; else n3++;
			  };
		  printf("\n");
	  }
	 }	
	
	return 0;
}