#X1012. 智能物流分拣系统

    传统题 1000ms 256MiB 显示标签>模拟

智能物流分拣系统

题目描述

20772077 年,某大型物流中心全面启用了“智能分拣机器人”系统。你被聘请为该系统的模拟测试工程师。

分拣中心可以看作一个 RRCC 列的网格地图。 地图上的每个格点可能包含以下几种状态:

  • 空地(用字符 . 表示):机器人可以通行,也可以放置货物。
  • 障碍物(用字符 # 表示):机器人不可通行,不可放置货物。
  • 货物(用大写字母 A - Z 表示):表示该位置当前堆放了某种类型的货物。

系统中有 NN 个机器人,编号为 11NN。 每个机器人都有以下属性:

  1. 位置:当前所在的行号 rr 和列号 cc1rR,1cC1 \le r \le R, 1 \le c \le C)。
  2. 朝向:当前面向的方向,用整数 030 \sim 3 表示(00:北, 11:东, 22:南, 33:西)。
  3. 手持状态:机器人手里是否拿着货物(最多只能拿 11 个)。

接下来系统会按顺序发出 KK 条指令。你需要模拟这些指令的执行过程。 每条指令指定一个机器人 IDID 和一个操作类型。指令是严格按顺序串行执行的(即上一条指令执行完毕或失败后,才执行下一条)。

操作类型详解

  1. F (Forward) - 前进
    • 机器人尝试向当前朝向移动一格。
    • 失败条件:如果前方是地图边界、障碍物(#),或者目标格子上有其他机器人,则操作失败,机器人保持原地不动。
  2. L (Left) - 左转
    • 机器人原地向左旋转 9090 度。
    • 方向变化规律:北(00)\to西(33)\to南(22)\to东(11)\to北(00)。
  3. R (Right) - 右转
    • 机器人原地向右旋转 9090 度。
    • 方向变化规律:北(00)\to东(11)\to南(22)\to西(33)\to北(00)。
  4. P (Pick) - 拾取
    • 机器人尝试捡起脚下格子(当前坐标)的货物。
    • 失败条件
      • 机器人手里已经有货物。
      • 脚下格子没有货物(是 .)。
    • 成功效果:脚下格子变为空地 .,机器人手中获得该字符代表的货物。
  5. D (Drop) - 放置
    • 机器人尝试将手中的货物放到脚下格子。
    • 失败条件
      • 机器人手里没有货物。
      • 脚下格子已经有货物(是 A-Z)。
    • 成功效果:机器人手中货物消失,脚下格子变为对应的货物字符。

注意: 任何“操作失败”仅代表该指令被忽略,机器人状态不发生改变,计入“未成功执行”,程序继续处理下一条指令。

输入格式

输入通过标准输入给出:

第一行包含三个整数 R,C,NR, C, N,分别表示地图行数、列数和机器人数量。

接下来 RR 行,每行 CC 个字符,表示初始地图(只包含 .#A-Z)。

接下来 NN 行,描述 NN 个机器人的初始状态。第 ii 行包含三个整数 ri,ci,dir_i, c_i, d_i,表示第 ii 个机器人的初始行号、列号和朝向。

  • 输入保证初始时机器人都在合法坐标,且位置互不重叠,也不会位于障碍物上。
  • 初始时所有机器人手中均无货物。

接下来一行包含一个整数 KK,表示指令数量。 接下来 KK 行,每行包含一个整数 idid 和一个字符 opop,表示对编号为 idid 的机器人执行 opop 操作。

输出格式

第一行输出一个整数,表示成功执行的指令总数。 接下来 RR 行,每行 CC 个字符,表示模拟结束后最终的地图状态。

数据范围

  • 1R,C501 \le R, C \le 50
  • 1N101 \le N \le 10
  • 1K20001 \le K \le 2000
  • 1riR,1ciC1 \le r_i \le R, 1 \le c_i \le C
  • di{0,1,2,3}d_i \in \{0, 1, 2, 3\}
  • 地图字符仅包含 . , # , A-Z

输入样例:

4 4 1
.A..
....
....
....
1 1 1
9
1 F
1 P
1 R
1 F
1 F
1 R
1 F
1 D
1 F

输出样例:

8
....
....
A...
....

解释:

  1. 1 F: R1 (1,1)->(1,2) [东]。成功。
  2. 1 P: 在 (1,2) 捡起 A。成功。
  3. 1 R: R1 转向南。成功。
  4. 1 F: R1 (1,2)->(2,2) [南]。成功。
  5. 1 F: R1 (2,2)->(3,2) [南]。成功。
  6. 1 R: R1 转向西。成功。
  7. 1 F: R1 (3,2)->(3,1) [西]。成功。
  8. 1 D: 在 (3,1) 放下 A。成功。
  9. 1 F: R1 (3,1)->(3,0) [西]。越界,失败。