QOJ.ac

QOJ

Limite de temps : 30 s - 120 s Limite de mémoire : 1024 MB Points totaux : 49

#11476. Go To 被认为是很有用的

Statistiques

Marlin 是一条丢失了儿子的鱼,正在寻找他。幸运的是,他遇到了海龟 Cynthia,她正和她的兄弟 Wally 和 Seymour 一起游泳。Cynthia 确切地知道 Marlin 需要去哪里,并且在指路时非常精确。虽然 Marlin 很聪明,能够完美地遵循指令,但要记住一长串的指令可能会有困难。Cynthia 需要找到一种方法来缩短指令列表。

Marlin 生活在一个 $R$ 行 $C$ 列的矩阵中。矩阵中的某些单元格是危险的,不能进入。Marlin 和他的儿子目前位于不同的非危险单元格中。Marlin 的儿子从不移动到其他单元格。Cynthia 决定以程序的形式给 Marlin 指路,程序由一系列指令组成,每行一条。每条指令属于以下 5 种类型之一:

  • N:向北(上)移动一个单元格,
  • S:向南(下)移动一个单元格,
  • W:向西(左)移动一个单元格,
  • E:向东(右)移动一个单元格,以及
  • G(i):跳转到指令列表的第 $i$ 行(从 1 开始计数)。

在执行前 4 种指令中的任意一条后,如果列表中有下一行,Marlin 会跳转到下一行。如果没有下一行,Marlin 就会永远停在原地。

例如,如果 Marlin 遵循以下程序:

1: N
2: E
3: G(6)
4: S
5: G(1)
6: W
7: G(4)

他会先向北移动(第 1 行),然后向东移动(第 2 行),然后跳转到第 6 行而不进行物理移动(第 3 行),然后向西移动(第 6 行),然后跳转到第 4 行(第 7 行),然后向南移动(第 4 行),然后跳转到第 1 行(第 5 行),然后向北移动(第 1 行),依此类推。

如果 Marlin 和他的儿子在任何时候处于同一个单元格,他们就会团聚,Marlin 将不再遵循任何指令。海龟 Cynthia 想要找出能让 Marlin 到达他儿子所在单元格的程序的最少行数,且要求 Marlin 在过程中永远不会进入危险单元格或移出矩阵边界。所有的 G 指令必须跳转到程序中已有的行。

输入格式

输入的第一行给出测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行包含 $R$ 和 $C$,即矩阵的行数和列数。接下来是 $R$ 行,每行包含一个长度为 $C$ 的字符串。这些行中第 $i$ 行的第 $j$ 个字符 $A_{ij}$ 表示矩阵中第 $i$ 行第 $j$ 列的单元格。字符 # 表示该单元格是危险的,大写字母 M 表示 Marlin 当前所在的单元格,大写字母 N 表示 Marlin 的儿子所在的单元格,. 表示一个未被占用的非危险单元格。

输出格式

对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),如果不存在能让 Marlin 在上述条件下到达他儿子所在单元格的程序,则 $y$ 为 IMPOSSIBLE,否则 $y$ 为此类程序中最少的指令行数。

数据范围

内存限制:1GB。 $1 \le T \le 100$。 $A_{ij}$ 为 #, ., MN 中的一种。 对于每个测试用例,恰好有一个单元格为 M。 对于每个测试用例,恰好有一个单元格为 N

测试集 1(可见) 时间限制:30 秒。 $1 \le R \le 10$。 $1 \le C \le 10$。

测试集 2(隐藏) 时间限制:120 秒。 对于最多 10 个测试用例: $1 \le R \le 100$。 $1 \le C \le 100$。 对于其余测试用例: $1 \le R \le 50$。 $1 \le C \le 50$。

样例

样例输入 1

5
2 5
N...#
....M
2 5
N#...
...#M
5 5
N..##
#.###
#...#
##.##
##..M
5 5
..N##
#.###
#...#
##.##
##..M
3 3
#M#
###
#N#

样例输出 1

Case #1: 4
Case #2: 7
Case #3: 5
Case #4: 6
Case #5: IMPOSSIBLE

说明

注意,即使程序必须包含尽可能少的行数,也不要求最小化 Marlin 移动的次数。

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.