Cod sursa(job #237002)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 28 decembrie 2008 21:18:12
Problema Tablete Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<iostream>
#include<stdio.h>
#define Nmax 1001
FILE *f=fopen("tablete.in","r"),*g=fopen("tablete.out","w");
unsigned int a[Nmax][Nmax];
unsigned short v[Nmax*Nmax];
int main()
{
	int n,k,i,j,s=0,aux;
	fscanf(f,"%d %d",&n,&k);
	if(!(k%2))
	{
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=n;j++)
				s++,fprintf(g,"%d ",s);
			fprintf(g,"\n");
		}
		return 0;
	}
	else
	{
		if(!(n%2))
		{
			aux=1;
			for(i=2;i<=n;i+=2)
			{
				for(j=1;j<k;j++)
					a[i-1][j]=aux,v[aux]=1,aux++;
				aux++;
				a[i-1][k]=aux;
				v[aux]=1;
				aux--;
				for(j=1;j<k;j++)
					a[i][j]=aux,v[aux]=1,aux+=2;
				a[i][k]=aux-1;
				v[aux-1]=1;
			}
		}
		if(n%2)
		{
			aux=1;
			for(i=2;i<=n-1;i+=2)
			{
				for(j=1;j<k-1;j++)
					a[i-1][j]=aux,v[aux]=1,aux++;
                                aux++;
				a[i-1][k]=aux;
				v[aux]=1;
				aux--;
				for(j=1;j<k;j++)
					a[i][j]=aux,v[aux]=1,aux+=2;
				a[i][k]=aux-1;
				v[aux-1]=1;
			}
			aux=(n-1)*k;int aux1=1;
			for(j=1;j<=k;j++)
				a[n][j]=aux+aux1,aux1++,v[a[n][j]]=1;
			a[1][k+1]=n*k,v[n*k]=1;
		}
		int i1=1,j1=k,n1=n*n;
		for(i=1;i<=n1;i++)
			if(!v[i])
			{
				j1++;
				if(j1>n)
					j1=k+1,i1++;
				a[i1][j1]=i;
			}
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
			fprintf(g,"%d ",a[i][j]);
		fprintf(g,"\n");
	}
	return 0;
}