Cod sursa(job #254821)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 7 februarie 2009 17:57:06
Problema Tablete Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<stdio.h>
#include<string.h>

int main()
{
	FILE *f=fopen("tablete.in","r");
	int n,k,i,j,nrimpare,nr,gen=1,rest,gen2=2;
	int pare[1000000];

	memset(pare,0,500000*sizeof(int));
	fscanf(f,"%i%i",&n,&k);
	fclose(f);
	if((n*n)%2==0)
		nrimpare=(n*n)/2;
	else
		nrimpare=(n*n)/2+1;
	nr=nrimpare/(n-1);
	rest=nrimpare%(n-1);

	f=fopen("tablete.out","w");
	for(i=0;i<nr;i++)
	{
		for(j=0;j<=k-2;j++)
		{
			fprintf(f,"%i ",gen);
			gen+=2;
		}
		fprintf(f,"%i ",gen-1);
		pare[gen-1]=1;
		for(j=k;j<n;j++)
		{
			fprintf(f,"%i ",gen);
			gen+=2;
		}
		fprintf(f,"%s","\n");
	}

	if(rest!=0)
	{
		if(k>n-rest)
		{
			for(j=0;j<n-rest-1;j++)
			{
				while(pare[gen2]==1)
					gen2+=2;
				fprintf(f,"%i ",gen2);
				gen2+=2;
			}

			for(j=n-rest-1;j<=k-2;j++)
			{
				fprintf(f,"%i ",gen);
				gen+=2;
			}
			fprintf(f,"%i ",gen-1);
			pare[gen-1]=1;
			for(j=k;j<n;j++)
			{
				fprintf(f,"%i ",gen);
				gen+=2;
			}
			fprintf(f,"%s","\n");
		}

		else
		{
			for(j=0;j<n-rest;j++)
			{
				while(pare[gen2]==1)
					gen2+=2;
				fprintf(f,"%i ",gen2);
				gen2+=2;
			}
			
			for(j=n-rest;j<n;j++)
			{
				fprintf(f,"%i ",gen);
				gen+=2;
			}
			fprintf(f,"%s","\n");
		}
	}

	else
	{
		for(j=0;j<=k-2;j++)
		{
			fprintf(f,"%i ",gen);
			gen+=2;
		}
		fprintf(f,"%i ",gen-1);
		pare[gen-1]=1;
		for(j=k;j<n;j++)
		{
			fprintf(f,"%i ",gen);
			gen+=2;
		}
		fprintf(f,"%s","\n");
	}


	for(i=nr+1;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			while(pare[gen2]==1)
				gen2+=2;
			fprintf(f,"%i ",gen2);
			gen2+=2;
		}
		fprintf(f,"%s","\n");
	}
	fclose(f);
	return 0;
}