Cod sursa(job #231656)

Utilizator vanila_CPPIonescu Victor Cristian vanila_CPP Data 14 decembrie 2008 12:46:58
Problema Tablete Scor 70
Compilator cpp Status done
Runda Algoritmiada 2009, Runda 1, Clasele 9-10 Marime 1.54 kb
#include <iostream>
#include <cstring>
#define FIN "tablete.in"
#define FOUT "tablete.out"
using namespace std;
long N,K;
long used[1000010];
long a[1010][1010];

void iofile(void){

		freopen(FIN,"rt",stdin);
		freopen(FOUT,"wt",stdout);

		scanf("%ld%ld",&N,&K);

		fclose(stdin);
		return ;
}


void next_step(long &x){

	long c=x+1;
	while (used[c]){++c;}
	x=c;
}

void complete(void){

	memset(used,0,sizeof(used));
	long x;
	if (K%2==0){

		if (N%2==0){

			x=1;
			for (int i=1;i<=N;++i){
				for (int j=1;j<=N;++j){
					a[i][j]=x;
					used[x]=1;
					next_step(x);
				}
			}
		} else
		{
			x=1;
			for (int i=1;i<=N;++i){
				for (int j=1;j<=K;++j){
					a[i][j]=x;
					used[x]=1;
					next_step(x);
				}
			}
			for (int i=1;i<=N;++i){
				for (int j=K+1;j<=N;++j){
						a[i][j]=x;
						used[x]=1;
						next_step(x);
				}
			}
		}
	} else {

		x=1;
		for (int i=1;i<=N;++i){
			for (int j=1;j<K;++j){
				a[i][j]=x;
				used[x]=1;
				next_step(x);
			}
			if (x%2!=0){
				int src=x+1;
				while (used[src] || src%2==1){++src;}
				a[i][K]=src;
				used[src]=1;
			} else {
				a[i][K]=x;
				used[x]=1;
				next_step(x);
			}
		}
		for (int i=1;i<=N;++i){
			for (int j=K+1;j<=N;++j){
					a[i][j]=x;
					used[x]=1;
					next_step(x);
			}
		}
	}

	for (int i=1;i<=N;++i){
			
		for (int j=1;j<N;++j){
			printf("%ld ",a[i][j]);
		}
		printf("%ld\n",a[i][N]);
	}

	fclose(stdout);
	return ;
}


int main(void){

	iofile();
	complete();
	return 0;
}