Cod sursa(job #230961)

Utilizator vladcyb1Vlad Berteanu vladcyb1 Data 14 decembrie 2008 11:04:06
Problema Tablete Scor 50
Compilator c Status done
Runda Algoritmiada 2009, Runda 1, Clasele 9-10 Marime 1 kb

#include <stdio.h>


#define FIN "tablete.in"
#define FOUT "tablete.out"
#define NMAX 1003


int N, K;
int A[NMAX][NMAX];
int Q[NMAX];

void solve()
{
	int first = 0, last = -1;
	int i, line = 0, pline = 0, j;

	for( i = 1; i <= N * N; i++ ) {
		if ( (i & 1)  > 0 ) {
			A[line][pline++] = i;
			if ( pline == K - 1 ) {
				Q[++last] = line;
				line++;
				pline = 0;
			}
		}
		else {
			if ( first <= last ) {
				A[Q[first]][K-1] = i;
				first++;
			}
			else {
				A[line][pline++] = i;
				if ( pline == K - 1 ) {
					Q[++last] = line;
					line++;
					pline = 0;
				}
			}
		}

		if ( first == N ) break;
	}

	for( line = 0; line < N; line++ )
		for( j = K; j < N; j++ )
			A[line][j] = ++i;

}


	

int main()
{
	FILE *fin = fopen( FIN, "r" );
	FILE *fout = fopen( FOUT, "w" );
	int i, j;

	fscanf( fin, "%d%d", &N, &K );
	
	solve();

	for( i = 0; i < N; i++ ) {
		for( j = 0; j < N; j++ )
			fprintf( fout, "%d ", A[i][j] );
		fprintf( fout, "\n" );
	}

	fclose( fin );
	fclose( fout );

	return 0;
}