UVa 769 - Magic of David Copperfield

链接

传送门

题意

给出\(n \times n\)的矩阵,最初在最左上的点,可以像上下左右4个方向移动,每次移动\(k\)步(每次移动的步数\(k\)不能相同),可以删除任意数量的必然无法走到的卡片。然后继续移动,直至只剩下一张卡片。

思路

每次都走奇数步,根据奇偶性,可知,不会走到与当前格子在同一斜线上的格子,然后删除最左上的一条斜线上的所有纸片。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int main() {
int t;
scanf("%d", &t);
while (t--) {
int n;
scanf("%d", &n);
int k = (n - 1) << 1;
for (int i = 0; i < k; ++i) {
printf("%d", 2 * (n + i) + 1);
for (int j = 0; j <= i; ++j) {
if (i - j >= n || j >= n) {
continue;
}
printf(" %d", j * n + i - j + 1);
}
puts("");
}
if (t) {
puts("");
}
}
return 0;
}