QOJ.ac

QOJ

Time Limit: 3.0 s Memory Limit: 960 MB Total points: 100 Hackable ✓

#15836. Long Distance Examination

統計

Hero A(显然是一个化名)是超级共鸣心灵感应中心(SRPH)的申请者之一,这是一个由拥有心灵感应能力的超级英雄组成的杰出协会。在通过了第一轮考试后,他目前正在奥地利维也纳度假。

然而,当他意识到自己看错了期末考试的时间表时,这个假期很快就被打断了。考试并不是在他度假回来后举行……而是现在就要举行!

为了不想在余下的假期里反思自己被梦想拒之门外,他充分利用自己的能力,远程召唤了一个自己的克隆体来参加考试,并由他通过心灵感应进行控制。

考试要求申请者利用他们的心灵感应能力导航一个迷宫,该迷宫由一个 $r \times c$ 的网格($r$ 行 $c$ 列)表示,我们称之为网格 B。Hero A 在奥地利找到了一个具有相同 $r \times c$ 网格形状的房间,并从这里参加考试;我们称之为网格 A。

Hero A 创建了一个克隆体(我们称之为克隆体 B),它出现在网格 B 的某个位置。每当 Hero A 移动时,克隆体 B 也会尝试模仿该动作(例如,如果 Hero A 向右走一步,克隆体 B 也会尝试向右走一步)。目标是让克隆体 B 在网格 B 设置的迷宫中导航并到达标记的终点。

不幸的是,这个设置并不完美。虽然可以保证网格 A 和网格 B 具有相同的 $r \times c$ 维度,但 Hero A 和克隆体 B 可能不会在网格的相同位置开始。此外,网格 A 和网格 B 都有障碍物,但这些障碍物可能放置在不同的位置!

具体来说,克隆体 B 的控制方式如下:

  • Hero A 每次只能水平或垂直移动一步。
  • Hero A 和克隆体 B 都不能走进障碍物,也不能走出网格。
  • 当 Hero A 在给定方向上移动一步时,克隆体 B 将尝试在同一方向上移动一步。
    • 如果克隆体 B 的移动被阻挡,克隆体 B 将不会移动。
    • 这不会阻止 Hero A 的移动。
  • 如果 Hero A 试图向被障碍物或墙壁阻挡的方向迈出一步,他和克隆体 B 都不会移动。

此外,Hero A 需要尽快完成考试,以免考官意识到(他们不会注意到,对吧?)他从一开始就不在那里!求 Hero A 为了让克隆体 B 到达终点所需的最少步数。

输入格式

输入的第一行包含一个整数 $T$,即测试用例的数量。接下来是 $T$ 个测试用例的描述。

每个测试用例的第一行包含两个空格分隔的正整数 $r$ 和 $c$——网格 A 和网格 B 的行数和列数。

接下来是 $r$ 行,每行包含一个长度为 $c$ 的字符串。这编码了网格 A 的状态。

接下来是另外 $r$ 行,每行包含一个长度为 $c$ 的字符串。这编码了网格 B 的状态。

每个网格中可能出现的字符如下:

  • “.”:空地
  • “X”:障碍物
  • “S”:起点(Hero A 在网格 A 中的起点,或克隆体 B 在网格 B 中的起点)
  • “D”:克隆体的终点/目标(仅出现在网格 B 中)

输出格式

对于每个测试用例,输出一个整数,对应到达终点所需的最少移动步数。如果终点不可达,则输出 -1。

数据范围

$1 \le T \le 10$ $1 \le r, c \le 100$ $2 \le r \times c \le 1000$ “S”在网格 A 和网格 B 中各出现且仅出现一次。 “D”在网格 B 中出现且仅出现一次。

样例

样例输入 1

2
5 5
S....
.....
.....
.....
.....
....S
.....
.....
.....
....D
7 5
XXXXX
XXXXX
XS..X
X.X.X
X...X
XXXXX
XXXXX
XXXXX
XS..X
XXX.X
X...X
XXX.X
XD..X
XXXXX

样例输出 1

4
14

说明 1

在第一个测试用例中,尽管 Hero A 和克隆体 B 的起点不同,但 Hero A 只需要向下移动,克隆体 B 就能到达终点。

在第二个测试用例中,Hero A 可以通过在他的网格中“顺时针”走两圈,让克隆体 B 以最优步数到达终点。

图 1. 网格 A 和网格 B 的示意图

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.