QOJ.ac

QOJ

時間限制: 6 s 記憶體限制: 1024 MB 總分: 100

#11205. 贪吃蛇鸟

统计

你喜欢解谜、水果,以及毫无理由地将蛇和鸟结合在一起的概念吗?如果对这些问题中至少一个的回答是肯定的,那么《Snakebird》可能就是适合你的游戏。通过这个烧脑的益智游戏,帮助蛇鸟们满足它们的食欲。

游戏开始时有一个 $M \times N$ 的网格棋盘,每个格子在初始时属于以下类型之一:

  • ‘R’, ‘G’, ‘B’:蛇鸟的头部。棋盘上至少有 1 只,最多 3 只蛇鸟。当你移动一只蛇鸟时,其他蛇鸟被视为障碍物。这意味着你不能进入被其他蛇鸟占据的格子。
  • ‘>’, ‘<’, ‘^’, ‘v’:蛇鸟的身体,指向更靠近头部的另一个身体部位。这 4 种类型分别指向右、左、上、下。保证除了最后一个身体部位外,每个头部/身体部位都恰好被另一个身体部位指向。同时也保证每个身体部位都指向一个头部/身体部位。
  • ‘.’:空地。蛇鸟可以进入空地。当蛇鸟进入空地时,它的头部进入该格子,所有其他身体部位移动到前一个头部/身体部位的位置。此动作瞬间完成。
  • ‘#’:障碍物。蛇鸟不能进入障碍物,但如果蛇鸟的任何部分位于障碍物上方一格,该障碍物就会支撑蛇鸟,使其停止下落。
  • ‘|’:尖刺。蛇鸟可以进入尖刺或掉落到尖刺上。然而,如果发生这种情况,蛇鸟就会死亡。
  • ‘@’:水果。蛇鸟可以进入水果所在的格子。当蛇鸟进入水果格子时,水果消失,该格子变为普通空地。同时,蛇鸟的所有头部/身体部位保持在原位,蛇鸟在水果所在的格子长出一个新头部。之前的头部变为连接新头部的身体部位。但在蛇鸟下落时,水果被视为障碍物,即使有蛇鸟的头部正向水果掉落。
  • ‘X’:出口。棋盘上恰好有 1 个出口。在所有水果消失之前,出口处于非激活状态,就像一个普通空地。在所有水果消失后,任何时候只要蛇鸟的头部位于出口格子,该蛇鸟就会消失并进入天堂。即使蛇鸟正在下落。如果蛇鸟掉落在尖刺上或掉出棋盘,同时它的头部掉进了出口格子,它会在进入天堂前死亡。 :(

在每一步中,你可以选择一只蛇鸟,将其头部移动到相邻的格子(四个方向之一)以进入空地或水果格子。每一步移动后,会发生神奇的事情:你的蛇鸟会受到重力影响,这意味着所有没有支撑的蛇鸟会开始下落,直到它们落到某些障碍物(或其他有支撑的蛇鸟)上或死亡。掉落在尖刺上或掉出棋盘会导致死亡。蛇鸟在下落过程中形状不会改变。

保证初始状态下没有任何东西在下落。

为了帮助 Redbird、Greenbird 和 Bluebird 赢得游戏,你需要将所有蛇鸟活着送入天堂。求出所需的最少移动步数。

输入格式

第一行输入包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。 每个测试用例的第一行包含 2 个数字 $M, N$,表示棋盘的行数和列数。接下来的 $M$ 行,每行包含 $N$ 个字符,表示棋盘。

输出格式

对于每个测试用例,输出一行 “Case #x: y”。$x$ 是测试用例编号(从 1 开始),$y$ 是将所有蛇鸟送入天堂所需的最少移动步数。如果无法做到,则输出 -1。

数据范围

  • $1 \le T \le 10$
  • $1 \le N, M \le 20$
  • 棋盘上水果、蛇鸟头部/身体的总数最多为 10。
  • 保证初始状态下没有任何东西在下落。

样例

样例输入 1

8
4 4
....
...v
X..G
##.#
4 4
....
...v
X..G
#..#
4 4
..X.
....
.R.@
####
4 7
.......
.......
>>B|..X
#######
4 7
.......
v......
>>B|..X
#######
4 5
>R...
##...
##.X.
##...
4 5
>R...
##...
##|X.
##...
9 11
.......X...
...........
....#......
...........
.#.........
.#.........
.#..#...B<<
....#..G<<^
.......####

样例输出 1

Case #1: 3
Case #2: -1
Case #3: 6
Case #4: -1
Case #5: 6
Case #6: 2
Case #7: -1
Case #8: 46

说明

在第一个测试用例中,绿色蛇鸟可以向左移动并进入出口。 在第二个测试用例中,由于间隙太大,无法进入出口。 在第三个测试用例中,红色蛇鸟需要向右移动吃掉水果,然后进入出口。 在第四个测试用例中,中间有一个尖刺,长度为 3 的蛇鸟无法穿过。 在第五个测试用例中,长度为 4 的蛇鸟能够穿过。 在第六个测试用例中,蛇鸟可以直接向右移动两次并跳向出口。 在第七个测试用例中,蛇鸟也可以跳向出口,但尖刺会在它到达出口的同时将其杀死。 最后一个样例看起来如下图所示。

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 1
IDTypeStatusTitlePosted ByLast UpdatedActions
#896General DiscussionOpen此题是假题dXqwq2026-01-30 19:56:46View

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.