Cod sursa(job #352397)

Utilizator Addy.Adrian Draghici Addy. Data 1 octombrie 2009 16:52:06
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <stdio.h>
#define DIM 1002

int A[DIM][DIM];
int n,i,j,k,t,x;

FILE *f = fopen("tablete.in","r");
FILE *g = fopen("tablete.out","w");

void afisare() {
	for (i=1; i<=n; i++) {
		for (j=1; j<=n; j++)
			fprintf(g,"%d ",A[i][j]);
		fprintf(g,"\n");
	}
}

int main() {
	
	fscanf(f,"%d%d",&n,&k);
	
	if (n%2==0 && k%2==0)
		for (i=1; i<=n; i++) {
			for (j=1; j<=n; j++)
				fprintf(g,"%d ",++x);
			fprintf(g,"\n");
		}
	
	if (n%2==0 && k%2==1) {
		for (i=1, t=1; i<n; i++)
			for (j=1; j<=n; j++) {
				if (j==k) {
					t = ++x;
					A[i][j] = ++x;
				}
				else
					if (j==1) {
						A[i][j] = t;
						if (i==1)
							x = 1;
					}
					else
						A[i][j] = ++x;
			}
		A[n][1] = t;
		for (j=2; j<=n; j++)
			A[n][j] = ++x;
		t = A[n][k];
		for (j=k; j>1; j--)
			A[n][j] = A[n][j-1];
		A[n][1] = A[1][n];
		A[1][n] = t;
		afisare();
	}
	
	if (n%2==1 && k%2==0) {
		for (i=1, t=1; i<n; i++)
			for (j=1; j<=n; j++) {
				if (j==k && i%2==0) {
					t = ++x;
					A[i][j] = ++x;
				}
				else
					if (j==1 && i%2==1) {
						A[i][j] = t;
						if (i==1)
							x = 1;
					}
					else
						A[i][j] = ++x;
			}
		A[n][1] = t;
		for (j=2; j<=n; j++)
			A[n][j] = ++x;
		afisare();
	}
	
	if (n%2==1 && k%2==1) {
		for (i=1, t=1; i<n; i++)
			for (j=1; j<=n; j++) {
				if (j==k && i%2==1) {
					t = ++x;
					A[i][j] = ++x;
				}
				else
					if (j==1 && i%2==0) {
						A[i][j] = t;
						if (i==1)
							x = 1;
					}
					else
						A[i][j] = ++x;
			}
		for (j=1; j<=n; j++)
			A[n][j] = ++x;
		t = A[n][k];
		for (j=k; j>1; j--)
			A[n][j] = A[n][j-1];
		A[n][1] = A[1][n];
		A[1][n] = t;
		afisare();
	}
	
	fclose(f);
	fclose(g);
	
	return 0;
}