木块问题(The Blocks Problem. UVa 101)
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
背景
计算机科学的许多领域都使用简单、抽象的领域进行分析和实证研究。 例如,早期的一项关于规划和机器人技术的人工智能研究(STRIPS)使用了若干个积木块创建一个积木世界,其中机器人手臂执行涉及操纵积木块的任务。 在这个问题中,您将在某些规则和约束下对一个简单的积木块世界进行建模。相反除了确定如何达到指定状态,您还将“编程”一个机器人手臂来响应有限的命令集。
问题描述
你将解析一系列命令,这些命令指示机器人手臂如何操纵积木块。
最初,桌面上平放着n个积木块(从0到n-1编号)b(i)积木块与b(i+1)积木块相邻,适用于所有0≤i<n-1,如下图所示:
操纵积木块的机器人手臂的有效命令是:
• move a onto b 把a和b上方的木块全部归位,然后把a摞到b上面。
• move a over b: 把 a 上方的木块归位,然后把 a 放在 b 所在木块堆的最上方。
• pile a onto b: 把b上方的木块全部归位,然后把a及a上面的木块摞在b上面。
• pile a over b: 把a及上面的木块整体摞在b所在木块堆的顶部。
注:这里a和b是积木块编号,,如果有非法指令(如 a 与 b 在同一堆),无需处理。
Format
Input
第一行输入n,表示有积木块的数目 0<n<25。 第二行块的数量后面是一系列块命令,每行一个命令。你的 程序应处理所有命令,直到遇到退出命令。
Output
输出应该积木世界的最终状态。 一共有n行输出,首先是每个原始块编号i(0≤i<n,其中n是块的数量),紧随其后是一个冒号。 如果该位置有积木块,则冒号后一个空格,之后是该位置的积木块编号,用空格隔开。
Samples
10
move 9 onto 1
move 8 over 1
move 7 over 1
move 6 over 1
pile 8 over 6
pile 8 over 5
move 2 over 1
move 4 over 9
quit
0: 0
1: 1 9 2 4
2:
3: 3
4:
5: 5 8 7 6
6:
7:
8:
9:
Limitation
1s, 1024KiB for each test case.