Cod sursa(job #241257)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 9 ianuarie 2009 18:04:34
Problema Tablete Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#define NR 1000005
int main()
{
	freopen("tablete.in","r",stdin);
	freopen("tablete.out","w",stdout);
	int n,k,salt=0,a[NR],i,m=1,exc,t,lim,exceptie;
	scanf("%d%d",&n,&k);
	exc=k;
	for (i=1; i<=n*n; i++)
	{
		//m++;
	    if (i==exc)
			if (m%2==0)
			{
				a[i]=m++;
				exc+=n;
			}
			else
			{
				salt=m++;
				a[i]=m++;
				exc+=n;
			}
		else
		{
			if (i%n==1 && salt)
				a[i]=salt;
			else
				a[i]=m++;
		}
	}
	if (a[n*n]>n*n)
	{
		t=a[n*(n-1)];
		a[n*(n-1)]=salt;
		for (i=n*(n-1)+1; i<=n*n-1; i++)
			if (a[i]>t)
			{
				a[i]=t;
				lim=i;
				break;
			}
		for (i=n*(n-1)+1; i<=n*n; i++)
			if ((i-k)%n==0)
			{
				exceptie=i;
				break;
			}
		for (i=lim+1; i<=exceptie; i++)
			a[i]=a[i-1]+1;
		a[exceptie+1]=a[exceptie]+2;
		for (i=exceptie+2; i<=n*n; i++)
			a[i]=a[i-1]+1;
	}
	for (i=1; i<=n*n; i++)
	{
		printf("%d ",a[i]);
		if (i%n==0)
			printf("\n");
	}
	return 0;
}
/*
Sol corecta ex:
1 2 4 5
3 6 8 9
7 10 12 15
11 13 14 16
*/