QOJ.ac

QOJ

実行時間制限: 10 s メモリ制限: 512 MB 満点: 100

#14759. 和平解决

統計

我们有一个大小为 $n \times n$ 的棋盘,其行和列均用 $1$ 到 $n$ 的整数编号。棋盘上放置了 $k$ 个国王,编号为 $1$ 到 $k$。与标准国际象棋一样,每个国王可以向八个方向移动,即在一步移动中,它可以移动到任何相邻的格子:与当前占用的格子有公共边或公共角的格子。

国王们对初始布局并不完全满意,他们每个人都选择了一个目标格子,并希望到达那里(可能与初始格子相同)。他们希望通过一系列移动将初始布局转变为目标布局。每次移动是指某个国王从当前占用的格子移动到与其相邻的格子。在整个过程中的任何时刻,都不能有任意两个国王占用相邻的格子。

你的任务是帮助国王们,并给出这样的一系列移动,或者判断这是不可能的。

输入格式

输入的第一行包含两个整数 $n$ 和 $k$($1 \le n \le 100$,$1 \le k \le 2500$),分别表示棋盘的大小和国王的数量。

接下来的 $n$ 行描述了初始布局。第 $i$ 行(对于 $1 \le i \le n$)包含 $n$ 个整数;其中第 $j$ 个数 $a_{i,j}$ 表示在第 $i$ 行第 $j$ 列的格子上有一个编号为 $a_{i,j}$ 的国王(当 $a_{i,j} > 0$ 时),如果该格子为空,则 $a_{i,j} = 0$。

接下来的 $n$ 行以相同的方式描述目标布局(即第 $i$ 行包含 $n$ 个整数 $b_{i,j}$,其中 $b_{i,j}$ 表示国王的编号,如果格子为空则为 $0$)。

对于所有的 $i, j$($1 \le i, j \le n$),满足 $0 \le a_{i,j}, b_{i,j} \le k$,且 $1$ 到 $k$ 中的每个数字在初始布局 $a$ 中恰好出现一次,在目标布局 $b$ 中也恰好出现一次。在初始布局和目标布局中,没有任何两个国王占用相邻的格子。

输出格式

如果存在满足要求的移动序列,你的程序应该在第一行输出单词 TAK,否则输出 NIE

如果答案是 TAK,则在第二行输出一个整数 $m$($0 \le m \le 5 \cdot 10^6$),表示你方案中的移动步数。可以证明,如果存在满足要求的序列,则必然存在一个满足上述长度限制的序列。

在接下来的 $m$ 行中,应输出每一步移动的描述。每行应包含三个整数 $c, i, j$,表示国王 $c$ 应该移动到第 $i$ 行第 $j$ 列的格子。该目标格子必须与该国王当前占用的格子相邻(特别地,不能是同一个格子),且不能与任何其他国王当前占用的格子相邻。

样例

输入样例 1

4 3
1 0 2 0
0 0 0 0
0 3 0 0
0 0 0 0
0 0 0 0
0 0 1 0
0 0 0 0
0 2 0 3

输出样例 1

TAK
13
3 3 1
2 2 3
3 4 2
3 4 3
3 4 4
2 3 2
1 1 2
1 1 3
2 3 1
3 3 3
3 4 4
2 4 2
1 2 3

输入样例 2

5 8
1 0 2 0 3
0 0 0 0 0
4 0 5 0 6
0 0 0 0 0
7 0 8 0 0
2 0 3 0 0
0 0 0 0 6
4 0 1 0 0
0 0 0 0 8
7 0 5 0 0

输出样例 2

NIE

说明

样例测试:测试 0a 和 0b 是上面的两个样例。此外:

  • 0c:$n = 100$,$k = 50$。若 $i = j$ 且 $i$ 为奇数,则 $a_{i,j} = (i + 1)/2$,否则 $a_{i,j} = 0$;若 $i = j$ 且 $i$ 为奇数,则 $b_{i,j} = 51 - (i + 1)/2$,否则 $b_{i,j} = 0$。

子任务

测试点被划分为以下子任务。每个子任务的测试由两组或更多独立的测试组组成。对于每个子任务,在占一半分数的测试中 $n$ 为奇数,在占另一半分数的测试中 $n$ 为偶数。

子任务 附加限制 分数
1 $n \le 5$ 18
2 $2k \le n$ 16
3 $n \le 40$ 38
4 无附加限制 28

如果你的输出中只有第一行(TAK/NIE)正确,你的程序将获得该测试点 20% 的分数。你不需要输出后续的行即可获得这些分数。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.