Cod sursa(job #431197)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 31 martie 2010 19:16:03
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include<stdio.h>
int n,k,q;
long a[1001][1001];
void make_par()
{
	q=0;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=k;++j)
			a[i][j]=++q;
	for(int i=1;i<=n;++i)
		for(int j=k+1;j<=n;++j)
			a[i][j]=++q;
}
void make_imp_par()
{
	int q=1,r=1;
	for(int i=1;i<=n;i++)
	{
		if(r)
		{
			a[i][1]=r;
			r=0;
			for(int j=2;j<k;j++)
				a[i][j]=++q;
			if((q+1)%2==0)
				a[i][k]=++q;
			else
			{
				a[i][k]=q+2;
				r=q+1;
				q+=2;
			}
			continue;
		}
		for(int j=1;j<k;j++)
			a[i][j]=++q;
		if((q+1)%2==0)
			a[i][k]=++q;
		else
		{
			a[i][k]=q+2;
			r=q+1;
			q+=2;
		}
	}
	for(int i=1;i<=n;i++)
		for(int j=k+1;j<=n;j++)
			a[i][j]=++q;
}
void make_imp_imp()
{
	int q=1,r=1;
	for(int i=1;i<n;i++)
	{
		if(r)
		{
			a[i][1]=r;
			r=0;
			for(int j=2;j<k;j++)
				a[i][j]=++q;
			if((q+1)%2==0)
				a[i][k]=++q;
			else
			{
				a[i][k]=q+2;
				r=q+1;
				q+=2;
			}
			continue;
		}
		for(int j=1;j<k;j++)
			a[i][j]=++q;
		if((q+1)%2==0)
			a[i][k]=++q;
		else
		{
			a[i][k]=q+2;
			r=q+1;
			q+=2;
		}
	}
	for(int j=1;j<k;j++)
		a[n][j]=++q;
	if((q+1)%2==0)
		a[n][k]=++q;
	else
	{
		a[n][k]=q+2;
		r=q+1;
		q+=2;
	}
	a[1][k+1]=r;
	for(int j=k+2;j<=n;j++)
		a[1][j]=++q;
	for(int i=2;i<=n;i++)
		for(int j=k+1;j<=n;j++)
			a[i][j]=++q;
}
void make_imp()
{
	if(n%2==0)
		make_imp_par();
	else
		make_imp_imp();
}
void afis()
{
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=n;++j)
			printf("%d ",a[i][j]);
		printf("\n");
	}
}
int main()
{
    freopen("tablete.in","r",stdin);
    freopen("tablete.out","w",stdout);
    scanf("%d%d",&n,&k);
	if(k%2==0) 
		make_par();
	else
		make_imp();
	afis();
    return 0;
}