Cod sursa(job #1558515)

Utilizator SilviuIIon Silviu SilviuI Data 29 decembrie 2015 12:23:35
Problema Tablete Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <stdio.h>
#include <algorithm>
#define nmax 1010

using namespace std;

int n,m;
int sol[nmax][nmax];

void print() 
{
	for (int i=1;i<=n;i++) {
		for (int j=1;j<=n;j++) printf("%d ",sol[i][j]);
		printf("\n");
	}
}

int main() {
	freopen("tablete.in","r",stdin);
	freopen("tablete.out","w",stdout);
	scanf("%d %d",&n,&m);
	for (int i=1;i<=n;i++)
	    for (int j=1;j<=n;j++)
	        sol[i][j]=((i-1)*n+j);
	if (m%2==0 && n%2==0) { print(); return 0; }
	if (m%2==0) {
		for (int i=2;i<=n;i+=2) swap(sol[i][m],sol[i][m+1]);
	    for (int i=2;i<=n;i+=2) {
		    for (int j=m+1;j<n;j++) sol[i][j]=sol[i][j+1];
	    }
	    for (int i=2;i<n;i+=2) swap(sol[i][n],sol[i+1][1]);
	    for (int i=3;i<=n;i+=2) sol[i][1]=((i-2)*n+m);
	    print(); return 0; 
	}
	if (n%2==1 && m%2==1) {
		for (int i=1;i<=n;i+=2) swap(sol[i][m],sol[i][m+1]);
	    for (int i=1;i<=n;i+=2) {
		    for (int j=m+1;j<n;j++) sol[i][j]=sol[i][j+1];
	    }
	    for (int i=1;i<n;i+=2) swap(sol[i][n],sol[i+1][1]);
	    for (int i=2;i<=n;i+=2) sol[i][1]=((i-2)*n+m);
	    print(); return 0;
	}
	for (int i=1;i<=n;i++) swap(sol[i][m],sol[i][m+1]);
	for (int i=1;i<=n;i++) {
		for (int j=m+1;j<n;j++) sol[i][j]=sol[i][j+1];
	}
	for (int i=1;i<n;i++) swap(sol[i][n],sol[i+1][1]);
	for (int i=2;i<=n;i++) sol[i][1]=((i-2)*n+m);
	print();
	return 0;
}