Cod sursa(job #236574)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 27 decembrie 2008 23:27:35
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <stdio.h>

long v[1010][1010], n,k,p,i,c,j,t;

int main()
{	freopen("tablete.in","r",stdin);
    freopen("tablete.out","w",stdout);
	scanf("%ld %ld", &n,&k);
	p=n/2;
	if (n%2==1) p--;
	t=2*n;
	for (i=1; i<=p; i++)
    {	c=t;
		for (j=n; j>k; j--)
		{	if (j%2==0)
		    {	v[2*i-1][j]=c;
				v[2*i][j]=c-1;
            } else
			{	v[2*i][j]=c;
				v[2*i-1][j]=c-1;
			}
			c-=2;
        }
	    v[2*i-1][k]=c;
	    v[2*i][k]=c-2;
	    for (j=1; j<k; j++) v[2*i][j]=j+t-2*n;
	    c=k+t-2*n;
	    for (j=1; j<k; j++)
        {	if (c==v[2*i][k]) c++;
		    v[2*i-1][j]=c;
		    c++;
        }
	    t+=2*n;
    }
	if (n%2==1)
	{	t+=n;
		c=t;
		for (i=n; i>k; i--)
		{	if (i%2==0)
		    {	v[n-2][i]=c;
				v[n-1][i]=c-1;
				v[n][i]=c-2;
            }else
			{	v[n][i]=c;
				v[n-1][i]=c-1;
				v[n-2][i]=c-2;
            }
			c-=3;
        }
		if (k%2==0)
		{	v[n-2][k]=c-4;
		    v[n-1][k]=c-2;
			v[n][k]=c;
			for (i=1; i<k; i++) v[n-2][i]=i+t-3*n;
			c=k+t-3*n;
			for (i=1; i<k; i++)
            {	if ((c==v[n-2][k])|(c==v[n][k])) c++;
				if ((c==v[n-2][k])|(c==v[n][k])) c++;
				v[n-1][i]=c;
				c++;
            }
			for (i=1; i<k; i++)
			{	if ((c==v[n-2][k])|(c==v[n-1][k])) c++;
			    if ((c==v[n-2][k])|(c==v[n-1][k])) c++;
				v[n][i]=c;
				c++;
			}
        } else
		{	v[n][k+1]--;
			v[n-2][k]=c+1;
			v[n-1][k]=c-3;
			v[n][k]=c-5;
			for (i=1; i<k; i++) v[n][i]=i+t-3*n;
			c=k+t-3*n;
			for (i=1; i<k; i++)
			{	if ((c==v[n-2][k])|(c==v[n][k])) c++;
				if ((c==v[n-2][k])|(c==v[n][k])) c++;
				v[n-1][i]=c;
				c++;
            }
			for (i=1; i<k; i++)
			{	if ((c==v[n][k])|(c==v[n-1][k]))c++;
			    if ((c==v[n][k])|(c==v[n-1][k])) c++;
				v[n-2][i]=c;
				c++;
            }
        }
    }
	for (i=1; i<=n; i++)
	{	for (j=1; j<=n; j++) printf("%ld ", v[i][j]);
		printf("\n");
    }
    return 0;
}