Cod sursa(job #830992)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 7 decembrie 2012 22:59:17
Problema Tablete Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <stdio.h>
FILE *f=fopen("tablete.in","r");
FILE *g=fopen("tablete.out","w");
int A[1001][1001],N,K;

int main(void){
	register int i,j,t,q;
	
	fscanf(f,"%d %d",&N,&K);
	
	switch(K%2){
		case 0:
		t=1;	
		for(i=1;i<=N;i++){
			for(j=1;j<=K;j++){
				A[i][j]=t++;
			}
		}
		for(i=1;i<=N;i++){
			for(j=K+1;j<=N;j++){
				A[i][j]=t++;
			}
		}
		case 1:
			switch(N%2){
				case 0:
					for(q=1;q<=N;q+=2){
						t=A[q-1][K]+1;
						for(j=1;j<K;j++){
							A[q][j]=t++;
						}
						A[q][K]=A[q-1][K]+K+1;
						A[q+1][1]=A[q-1][K]+K;
						t=A[q-1][K]+K+2;
						for(j=2;j<=K;j++)
							A[q+1][j]=t++;
					}
					t=A[N][K]+1;
					for(i=1;i<=N;i++)
						for(j=K+1;j<=N;j++)
							A[i][j]=t++;
				case 1:
					for(q=1;q<=N-2;q+=2){
						t=A[q-1][K]+1;
						for(j=1;j<K;j++){
							A[q][j]=t++;
						}
						A[q][K]=A[q-1][K]+K+1;
						A[q+1][1]=A[q-1][K]+K;
						t=A[q-1][K]+K+2;
						for(j=2;j<=K;j++)
							A[q+1][j]=t++;
					}
					for(j=1;j<=K;j++){
						A[N][j]=(N-1)*K+j;
					}
					t=A[N][K]+1;
					for(i=1;i<=N;i++){
						for(j=K+1;j<=N;j++){
							A[i][j]=t++;
						}
					}
					A[N][K]=N*K+1;
					A[1][K+1]=N*K;
			}
			
	}
	
	for(i=1;i<=N;i++){
		for(j=1;j<=N;j++)
			fprintf(g,"%d ",A[i][j]);
		fprintf(g,"\n");
	}
	return 0;
}