Pagini recente » Cod sursa (job #837394) | Cod sursa (job #262338) | Cod sursa (job #1120108) | Cod sursa (job #2531182) | Cod sursa (job #230688)
Cod sursa(job #230688)
#include <cstdio>
#include <cassert>
const int N_MAX = 1000;
int n,k;
int a[N_MAX][N_MAX];
void rot_end ( int x ) {
int aux = a[x+1][0];
a[x+1][0] = a[x][k];
for (int j = k+1; j < n; ++j) a[x][j-1] = a[x][j];
a[x][n-1] = aux;
}
void rot_begin ( int x ) {
int aux = a[x-1][n-1];
a[x-1][n-1] = a[x][k];
if (n & 1) {
for (int j = k-1; j >= 0; --j) a[x][j+1] = a[x][j];
a[x][0] = aux;
} else {
for (int j = k-1; j > 0; --j) a[x][j+1] = a[x][j];
a[x][1] = aux;
}
}
void check() {
for (int i = 0; i < n; ++i) {
assert(a[i][k] % 2 == 0);
for (int j = 0; j < n-1; ++j) {
assert(a[i][j] < a[i][j+1]);
}
}
}
int main() {
#ifdef CHECK
for (n = 3; n <= 1000; ++n) {
printf("n = %d\n",n);
for (k = 1; k < n-1; ++k) {
#else
freopen("tablete.in","rt",stdin);
freopen("tablete.out","wt",stdout);
scanf("%d %d",&n,&k);
--k;
#endif
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
a[i][j] = n*i + j + 1;
for (int i = 0; i < n-1; ++i)
if (a[i][k] & 1)
rot_end(i);
if (a[n-1][k] & 1)
rot_begin(n-1);
#ifdef CHECK
check();
}
printf(" OK\n");
}
#else
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
printf("%d ",a[i][j]);
}
printf("\n");
}
#endif
return 0;
}