QOJ.ac

QOJ

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

#2381. 困境机器人

统计

一个机器人被困在星际飞船的残骸中。残骸的某处有一个传送器,可以将可怜的机器人带到安全地带。

飞船正在沿所有轴失控旋转。附近的一颗恒星照亮了残骸。飞船还配备了人工重力发生器。无论飞船的方向如何,人工重力总是将机器人拉离恒星。

机器人配备了太阳能电池板,必须依靠太阳能才能在残骸中移动。当残骸的一部分遮挡住阳光时,机器人就无法移动。然而,机器人在每次移动后都会将自己锚定,不会有乱撞或掉入太空虚空的风险。

残骸及其周围区域由一个大小为 $m \times n \times p$ 的三维网格 $a$ 表示。每个单独的方块要么是飞船的一部分,要么是真空。飞船的方块可能是不连续的。

机器人最初锚定在飞船的一块碎片上。机器人可以自行选择何时移动,以及何时等待阳光从方便的方向照射过来。

更正式地说,重力可以将机器人沿 3 个轴中每个轴的 2 个方向(共 6 个方向)拉动。如果从该单元格沿重力的相反方向没有残骸,则该单元格被阳光照亮。在进行每次移动之前,机器人可以有效地选择重力拉动的方向。在进行移动时,起始位置和目标位置必须同时被阳光照亮。

允许进行以下移动:(在下图中,光线总是从上方照射;蓝色方块(或黑白打印中的深色方块)代表机器人,橙色方块(或浅色方块)是可能的目标位置)

  1. 在地面上移动 如果机器人停在一个方块上,它可以移动到相邻的位置,前提是该位置处于相同的高度。 机器人不能对角移动。目标位置也必须被阳光照亮。

  2. 跳下悬崖 机器人可以从高处迈出一步,随后向下坠落。对坠落的长度没有限制。

机器人不能坠落到太空的虚空中,也不能坠落到未被照亮的位置。

  1. 向下坠落 如果机器人被阳光照亮,并且发现自己悬空,它可以向下坠落。如果重力方向发生了改变,这种情况就会发生。

机器人不能坠落到太空的虚空中。

目标是尽可能以最少的移动次数到达传送器。为了使传送器工作,机器人必须牢固地锚定在飞船上。换句话说,机器人必须在一次有效移动结束时位于传送器处,而仅仅通过它坠落是无效的。传送器不会遮挡阳光或机器人的移动。

输入格式

第一行包含三个整数 $m, n, p$ ($1 \le m, n, p \le 500$)。

飞船及飞船周围区域由 $p$ 个块描述。 第 $k$ 个块描述了位于第 $k$ 层高度的方块。每个块由 $n$ 行组成。 第 $k$ 个块的第 $i$ 行由 $m$ 个符号组成。第 $j$ 个符号称为 $a_{ijk}$。

  • 如果 $a_{ijk}$ 是 “*”,则它是一个实心块。
  • 如果 $a_{ijk}$ 是 “-”,则它是一个空块。
  • 如果 $a_{ijk}$ 是 “R”,则该块包含机器人。保证只有一个这样的块。保证机器人连接到一个实心块上。
  • 如果 $a_{ijk}$ 是 “T”,则该块包含传送器。保证只有一个这样的块。

输出格式

打印到达传送器所需的最少移动次数,如果传送器不可达,则输出 $-1$。

样例

样例输入 1

2 5 1
R-
*-
*-
*T
**

样例输出 1

1

样例输入 2

3 2 1
R-T
***

样例输出 2

2

样例输入 3

3 3 1
-R-
-*-
-T-

样例输出 3

-1

样例输入 4

5 4 2
-R---
-****
-****
-****
-----
-----
*T---
----*

样例输出 4

5

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.