【背景】

在计算机科学中的很多地方都会使用简单,抽象的方法来做分析和实验验究。比如在早期的规划学和机器人学的人工智能研究就利用一个积木世界,让机械臂执行操作积木的任务。

在这个问题中,你将在确定的规则和约束条件下构建一个简单的积木世界。这不是让你来研究怎样达到某种状态,而是编写一个“机械臂程序”来响应有限的命令集。

【问题】

问题就是分析一系列的命令,告诉机械臂如何操纵放在一个平台上的积木。最初平台上有n个积木(编号由0到n - 1),对于任意的0 ≤ i < n - 1,积木bi都与bi + 1相临,图示如下:

图:积木世界的初始状态

机械臂操作积木的有效指令列举如下:

  • move a onto b

    • a和b都是积木的编号,先将a和b上面所有的积木都放回原处,再将a放在b上。
  • move a over b
    • a和b都是积木的编号,先将a上面所有的积木放回原处,再将a放在b上。(b上原有积木不动)
  • pile a onto b
    • a和b都是积木的编号,将a和其上面所有的积极组成的一摞整体移动到b上。在移动前要先将b上面所有的积极都放回原处。移动的一摞积木要保持原来的顺序不变。
  • pile a over b
    • a和b都是积木的编号,将a和其上面所有的积极组成的一摞整体移动到b所在一摞积木的最上面一个积木上。移动的一摞积木要保持原来的顺序不变。
  • quit
    • 结束积木世界的操纵。
    • 当a = b或a和b处在同一摞时,任何企图操作a和b的命令都是非法的。所有非法的命令都要忽略,且不能对当前积木的状态产生作用。

【输入】

输入由1个整数n开始开始,该整数独占一行,表示积木世界中的积木数量。你可以假定0 < n < 25。
从积木数量值的下一行开始是一系列的命令,每条命令独占一行。你的程序要处理所有的命令直到输入退出命令。
你可以假定所有的命令都按上文所示的格式给出。不会出现语法错误的命令。
【输出】
以积木世界的最终状态作为输出。每一个原始积木的位置i(0 ≤ i < n,n为积木数量)后面都要紧跟一个冒号。如果至少有一个积木在该位置上,冒号后面都要紧跟一个空格,然后是该位置上所有积木编号的序列。每2个积木的编号之间以一个空格隔开。行尾不能出现多余的空格。
每个积木位置独占一行(即第一行输入的n,对应输出n行数据)。
【样例输入】
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: 【分析与说明】
这道题核心使用vector<int>pile[maxn],所有操作都是围绕它进行的。vector就像一个二维数组,只是第一维的大小是固定的(不超过maxn),但第二维的大小就不固定了。要充分理解透它。
vector是一个不定长组数,可以用clear()清空,resize()改变大小,用push_back()和pop_back()在尾部添加和删除元素,用empty()测试是否为空。vector之间可以直接赋值或作为函数的返回值。
 

最新文章

  1. VLAN终结及三层子接口
  2. Hadoop的Map侧join
  3. 【ZOJ 3844】Easy Task
  4. POJ 1273 Drainage Ditches -dinic
  5. IDEA UML类图插件
  6. 二维数组实现checkbox的分组多选
  7. 为什么X86汇编中的mov指令不支持内存到内存的寻址?
  8. Android(java)学习笔记127:Android Studio新建工程中的build.gradle、settings.gradle
  9. Android 打造自己的个性化应用(五):仿墨迹天气实现续--&gt; 使用Ant实现zip/tar的压缩与解压
  10. (sqlite3.OperationalError) no such table: users [SQL: &#39;SELECT users.id AS users_id, users.email AS users_email, users.username AS users_username, users.role_id AS users_role_id, users.password_hash A
  11. 在UltraEdit中如何像NotePad++一样实现双击单词在全文中高亮
  12. 腾讯AI开放平台的使用
  13. Ubuntu18.04 下 VirtualBox or VMWare 虚拟化问题
  14. POJ 3262 Protecting the Flowers 【贪心】
  15. Git入门看这一篇就够了! (转)
  16. ZTree 获取选中的项
  17. 动态加载JS脚本到HTML
  18. 查询指定网段可用IP脚
  19. spring boot 修改Tomcat端口
  20. (转)C#中“EQUALS”与“==”的速度比较

热门文章

  1. 【做题笔记】洛谷P1955[NOI2015]程序自动分析
  2. threading 官方 线程对象和锁对象以及条件对象condition
  3. c#修改项目名称
  4. opencv:形态学操作-腐蚀与膨胀
  5. 一篇文章了解JsBridge
  6. Django模板结构优化{% include %}和{% extend %}标签
  7. yii2关闭(开启)csrf的验证
  8. vim配置之——ctags与TagList的配置以及NERDTree &amp;&amp; doxygentoolkit的安装
  9. 解决springboot 出现异常: java.net.BindException: Address already in use: bind
  10. Mac系统中桌面图片和用户头像图片的路径