luogu#P16006. [ICPC 2020 NAC] Tomb Raider

[ICPC 2020 NAC] Tomb Raider

题目描述

古墓丽影胡进入了一座新古墓!古墓里布满了石像鬼、镜子和障碍物。有一扇门,门后藏着宝藏。胡必须打开这扇守护宝藏的门。门上用古老的文字写着开门的秘诀:

每个石像鬼的每一张脸都应当看到另一张石像鬼的脸。

这意味着石像鬼必须被旋转,使得光线束能够从每个石像鬼的一张脸出发,到达另一张石像鬼的脸(可能是它自己的另一张脸)。光线可以在镜子中反射。

古墓的平面图可以描述为一个 n×mn \times m 的矩形网格,每个格子可能是:

  • 点号 (.) 表示空格子。
  • 井号 (#) 表示障碍物。
  • 正斜线 (/) 表示双面镜,反斜线 (\) 也表示双面镜。
  • 字符 V 表示一个石像鬼,它的两张脸分别朝向上方和下方。
  • 字符 H 表示一个石像鬼,它的两张脸分别朝向左侧和右侧。

除了 \/ 镜子之外,古墓的四周由镜面墙壁包围。关于光的传播,采用以下常识:

  1. 光在空格子中沿直线传播。
  2. 两束光可以相交而不互相干扰。
  3. \ 镜子将从上方、下方、左侧或右侧入射的光分别反射到右侧、左侧、下方或上方。
    / 镜子将从上方、下方、左侧或右侧入射的光分别反射到左侧、右侧、上方或下方。
  4. 光遇到墙壁(墙壁均为镜面)时,会被 180180 度反射。
  5. 光被障碍物和石像鬼阻挡。

胡可以将任意一个石像鬼旋转 9090 度。时间紧迫,他想知道为了打开宝藏之门,至少需要旋转多少个石像鬼。

输入格式

输入的第一行包含两个空格分隔的整数 nnmm1n,m5001 \le n, m \le 500),表示古墓的尺寸。

接下来的 nn 行,每行包含一个长度为 mm 的字符串 ss,字符如上所述,表示古墓的平面图。

输出格式

输出一个整数,表示为了打开宝藏之门,至少需要旋转的石像鬼数量。如果无解,输出 1-1

5 5
/.V.\
./.V.
..#..
.V.#.
\.V./
3
2 5
V...\
H...V
-1
2 2
VV
VV
0

提示

样例解释

:::align{center} :::

上图分别展示了样例输入 #1 的初始配置(左)和解法配置(右)。为了解开谜题,需要旋转三个石像鬼。

翻译由 DeepSeek V3.2 完成