QOJ.ac

QOJ

حد الوقت: 1.5 s حد الذاكرة: 256 MB مجموع النقاط: 100

#11055. 鲁滨逊

الإحصائيات

在风暴中被冲到荒岛上的鲁滨逊造了一艘船,以便出海寻找人类的居住地。他是一位经验丰富的船员,因此他按照工艺规则建造了这艘船:它具有纵向对称轴,形状适宜。船头较窄,向船中心逐渐变宽,然后又向船尾逐渐变窄。特别地,在船的某个中间位置,船身比船头和船尾都要宽。

不幸的是,鲁滨逊在极其不合适的地方下水了:周围全是极其茂密的芦苇。而且,芦苇非常坚硬,船无法冲过去。也许鲁滨逊可以通过在芦苇丛中小心地操纵来到达公海。

由于机动性不足,船可以向前、向后甚至向侧面(向左或向右)移动,但不能转向。因此,船在移动时,船尾或侧面朝前是允许的,甚至可能是必要的。

你需要判断鲁滨逊是否能到达公海。

为了简化任务,岛屿及其周边环境将由一张正方形地图表示,地图被划分为单位正方形区域,每个区域要么是水域,要么是鲁滨逊的船的一部分,要么是障碍物(如陆地或芦苇)。初始时,船平行于四个基本方向之一放置,即其纵向对称轴平行于该方向,且该轴平分其所覆盖的单位区域。

我们假设公海从地图边界外开始。因此,如果鲁滨逊的船能够离开地图所描绘的区域,他就能到达公海。单次移动是指将船向选定方向(北、南、东或西)移动到相邻的区域。如果移动前后船都完全处于水域中(即不占据任何包含障碍物的区域),则该移动是允许的。

你需要编写一个程序:

  • 从标准输入读取地图描述;
  • 计算船完全离开地图区域所需的最少移动次数;
  • 将该数字输出到标准输出。

输入格式

第一行包含一个整数 $3 \le n \le 2\,000$,表示地图的边长。接下来的 $n$ 行中,每行包含 $n$ 个字符,描述地图的各个区域:第 $(j+1)$ 行的第 $i$ 个字符表示区域 $(i,j)$ 的内容。可能出现的字符如下:

  • "." - (点)表示充满水的区域;
  • "X" - 表示障碍物(陆地或芦苇);
  • "r" - 表示鲁滨逊船的一部分。

输出格式

你的程序应在标准输出的第一行(也是唯一一行)输出一个正整数,等于船完全离开地图区域所需的最少移动次数。如果无法到达公海,则输出单词 'NIE'(波兰语中的“不”)。

样例

输入 1

10
..........
..........
..r.......
.rrrX.....
rrrrr.....
.rrr......
X.r.......
.Xr.......
..........
..........

输出 1

10

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.