QOJ.ac

QOJ

时间限制: 1 s 内存限制: 256 MB 总分: 100

#11092. 跳舞的磁盘

统计

Luka 精通汉诺塔游戏,并发明了一种类似的圆盘与杆的游戏。该游戏由 $n$ 个不同大小的木制圆盘和 36 根杆组成。圆盘按大小递增的顺序编号为 $1$ 到 $n$。杆按从上到下编号为 $1$ 到 $6$,从左到右编号为 $1$ 到 $6$,共组成 6 行 6 列。

一个操作示例

游戏开始时,所有 $n$ 个圆盘以任意顺序堆叠在左上角的杆上。在每一步中,玩家可以从某根杆 $R$ 的顶部拿起一叠一个或多个圆盘,并将它们(不改变顺序)转移到 $R$ 正下方或正右方的杆的顶部。游戏的目标是让所有圆盘堆叠在右下角的杆上,并按大小从上到下递增的顺序整齐排列。

给定左上角杆上圆盘的初始顺序,请找出任何能解决该游戏的有效步骤序列。你可以假设解总是存在的。

输入格式

第一行包含一个整数 $n$ ($1 \le n \le 40\,000$),表示圆盘的数量。下一行包含一个序列 $d_1, d_2, \dots, d_n$ ($1 \le d_k \le n$),表示左上角杆上圆盘的初始顺序(从底到顶)。

输出格式

输出 $m$ 行,其中 $m$ 是你解法中的步数。第 $k$ 行应包含四个标记 $r_k, c_k, p_k, n_k$,描述你解法中的第 $k$ 步。标记含义如下:

  • $r_k$ 和 $c_k$ 是 $1$ 到 $6$ 之间的整数,表示我们从中拿起圆盘的杆所在的行号和列号,
  • $p_k$ 是大写字母 “D” 或 “R”,分别表示我们将圆盘转移到正下方或正右方的杆,
  • $n_k$ 是一个正整数,表示我们在这一步中转移的圆盘数量。

所有步骤必须符合上述规则,并正确解决该谜题。

样例

输入 1

6
1 6 5 4 3 2

输出 1

1 1 D 6
2 1 D 6
3 1 D 6
4 1 D 6
5 1 D 6
6 1 R 6
6 2 R 6
6 3 R 6
6 4 R 6
6 5 R 5
6 5 R 1

说明 1

在上面的示例中,前 9 步只是将所有圆盘在不改变顺序的情况下移动到第 6 行第 5 列的杆上——即右下角目标杆的左侧。在接下来的步骤中,从该杆顶部取出的 5 个圆盘(从底到顶为 $6, 5, 4, 3, 2$)被移动到目标杆上。最后,圆盘 1 被移动到目标杆上,从而获得目标顺序(从底到顶为 $6, 5, 4, 3, 2, 1$)。

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.