QOJ.ac

QOJ

时间限制: 1.0 s 内存限制: 256 MB 总分: 100

#13156. 冰封之地

统计

给定一个 $R$ 行 $C$ 列的棋盘,每个格子要么是干地('#'),要么是冰地('.')。 你可以在棋盘上向四个方向(北、南、东、西)移动。 在干地上,你可以随意行走或原地不动;然而,冰地非常滑。如果你站在格子 $(r, c)$ 并决定向某个方向移动,你将沿着该方向持续移动,直到到达干地或棋盘边界。

例如,考虑以下 6 行 7 列的棋盘:

#......
.#.....
..##...
..##...
.......
.#.....
  • 从 $(1, 3)$(第 1 行第 3 列)出发,如果你向南移动,你最终会停在 $(3, 3)$。
  • 从 $(4, 4)$ 出发,如果你向北移动,你最终会停在 $(3, 4)$。
  • 从 $(1, 1)$ 出发,如果你向东移动,你最终会停在 $(1, 7)$。
  • 从 $(6, 5)$ 出发,如果你向西移动,你最终会停在 $(6, 2)$。

假设你的初始位置在 $(3, 7)$,移动序列依次为西、西、西、南、东、北、西、西。那么你的位置变化为 $(3, 7) \to (3, 4) \to (3, 3) \to (3, 1) \to (6, 1) \to (6, 2) \to (2, 2) \to (2, 1) \to (2, 1)$,总共访问了 8 个不同的格子。注意格子 $(2, 1)$ 被访问了两次。仅经过的格子不被视为已访问,例如在上述例子中,如果你从 $(3, 1)$ 向南移动,你会经过 $(4, 1)$ 和 $(5, 1)$ 并到达 $(6, 1)$;因此,$(4, 1)$ 和 $(5, 1)$ 不被视为从该次移动中访问,只有 $(3, 1)$ 和 $(6, 1)$ 被视为已访问。

你可以将任意冰地改为干地,你的目标是确保无论初始位置在哪里,你总能访问棋盘上的所有格子;换句话说,你不知道自己的初始位置,但给定棋盘后,你要确保能够达成目标。为了确保目标能够实现,你需要改变的最少格子数量是多少?

输入格式

输入的第一行包含两个整数:$R$ 和 $C$ ($1 \le R, C \le 500$),分别表示棋盘的行数和列数。接下来的 $R$ 行,每行包含 $C$ 个字符,表示给定的棋盘。每个字符要么是表示干地的 '#',要么是表示冰地的 '.'。

输出格式

输出一行,包含一个整数,表示为了确保无论初始位置在哪里都能访问棋盘上所有格子,你需要改变的最少格子数量。

样例

输入 1

4 4
....
.###
##..
###.

输出 1

1

说明 1

我们只需要改变格子 $(3, 3)$。

....
.###
###.
###.

设 'N' 为北,'S' 为南,'W' 为西,'E' 为东。

  • 如果你从 $(1, 1)$ 出发,移动序列 “SSENNWENSESSEWNENWNE” 将访问所有格子。对应的位置序列为:$(1, 1) \to (3, 1) \to (4, 1) \to (4, 2) \to (3, 2) \to (2, 2) \to (2, 1) \to (2, 2) \to (1, 2) \to (2, 2) \to (2, 3) \to (3, 3) \to (4, 3) \to (4, 4) \to (4, 3) \to (3, 3) \to (3, 4) \to (2, 4) \to (2, 3) \to (1, 3) \to (1, 4)$。
  • 如果你从 $(1, 2)$ 出发,移动序列 “W” 加上上述第一个例子中的移动序列将访问所有格子。对应的位置序列为:$(1, 2) \to (1, 1) \to \dots$
  • 如果你从 $(1, 3)$ 出发,移动序列 “W” 加上上述第一个例子中的移动序列将访问所有格子。对应的位置序列为:$(1, 3) \to (1, 1) \to \dots$
  • 如果你从 $(4, 3)$ 出发,移动序列 “NNNW” 加上上述第一个例子中的移动序列将访问所有格子。对应的位置序列为:$(4, 3) \to (3, 3) \to (2, 3) \to (1, 3) \to (1, 1) \to \dots$
  • 如果你从 $(4, 4)$ 出发,移动序列 “NNW” 加上上述第一个例子中的移动序列将访问所有格子。对应的位置序列为:$(4, 4) \to (2, 4) \to (1, 4) \to (1, 1) \to \dots$

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.