QOJ.ac

QOJ

Límite de tiempo: 2 s - 8 s Límite de memoria: 300 MB Puntuación total: 100

#2662. 炸弹人

Estadísticas

Bajtazar 正在玩一款波兰版的《炸弹人》游戏。玩家在 $n \times n$ 的棋盘上移动。每个格子要么是空的,要么包含障碍物(砖墙或坚硬的岩石)。障碍物所在的格子无法进入。

游戏的目标是尽快从起点移动到终点。从一个格子移动到相邻的格子(共享边)需要 1 秒。

游戏开始时,玩家可以在棋盘上任何不包含坚硬岩石的格子上放置一颗炸弹。这包括砖墙、起点、终点或空地。炸弹爆炸后,会摧毁与炸弹位于同一行或同一列的所有砖墙,前提是炸弹与该砖墙之间没有坚硬的岩石。换句话说,如果一个砖墙格子与炸弹在同一行或同一列,且它们之间没有坚硬的岩石,那么该砖墙就会变成可以通过的空地。

炸弹在玩家进入棋盘之前就会引爆,因此无论炸弹放置在哪里,玩家都不会受到伤害。

Bajtazar 想要为不同的棋盘找到最优解。请编写一个程序来帮助他。

输入格式

第一行包含一个整数 $n$ ($2 \le n \le 1000$),表示棋盘的大小。 接下来的 $n$ 行描述了棋盘的每一行;每行由一个长度为 $n$ 的字符串组成,包含字符 .(空地)、#(砖墙)、X(坚硬岩石)、P(起点)和 K(终点)。 输入中恰好包含一个起点和一个终点。假设这些格子初始为空。

输出格式

第一行应输出一个整数 $T$,表示在最优放置炸弹的情况下,从起点到终点的最小移动时间(以秒为单位)。 第二行应输出两个整数 $W$ 和 $K$,分别表示放置炸弹的行号和列号。行号和列号从 1 到 $n$ 编号(从上到下,从左到右)。 第三行(最后一行)应输出一个长度为 $T$ 的字符串,描述从起点到终点的移动序列。该序列应由字符 LPGD 组成,分别表示向左、向右、向上或向下移动。

如果无论炸弹放置在哪里都无法从起点到达终点,则输出一行包含单词 NIE。 如果存在多个正确的解,输出其中任意一个即可。

说明

示例说明:不使用炸弹时的最小移动时间为 13 秒。将炸弹放置在第二行第三列的交点处,可以摧毁三堵砖墙,从而使移动时间缩短至 9 秒。

测试用例

  1. $n = 7$,起点和终点在棋盘的对角,无障碍物,结果为 12。
  2. $n = 10$,起点和终点被三道斜向的坚硬岩石墙隔开,结果为 NIE
  3. $n = 21$,棋盘被坚硬岩石包围,起点和终点之间只有一条锯齿状路径,结果为 198。
  4. $n = 200$,起点和终点在棋盘的对角,其余格子均为砖墙,结果为 398。
  5. $n = 1000$,仅前两行包含非坚硬岩石的格子,结果为 1001。

子任务

子任务 条件 时间限制 分数
1 棋盘不包含砖墙 8 s 10
2 $n \le 50$ 2 s 20
3 $n \le 200$ 3 s 30
4 $n \le 1000$ 8 s 40

如果你的程序仅正确输出了第一行(最小时间),将获得该测试点 80% 的分数。请注意,程序仍需在时间和内存限制内运行,且不能出现运行时错误。

样例

输入格式 1

6
......
.X.##.
..#.X.
..X.#K
.P#.X#
.X....

输出格式 1

9
2 3
GGPPGPPDD

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.