AT_ndpc2026_s 2 枚の扉
题目描述
你有一个 $N \times N$ 的网格。用 $(i,j)$ 表示第 $i$ 行(自上而下)、第 $j$ 列(自左而右)的单元格。
相邻单元格(共享边)之间的状态由一个字符 $c$ 表示:
- 如果 $c =.$,两个单元格之间没有任何阻隔,可以自由通过。
- 如果 $c = D$,有一扇普通门,可以自由通过。
- 如果 $c = A$,有一扇特殊门 $A$,可以自由通过。
- 如果 $c = B$,有一扇特殊门 $B$,可以自由通过。
- 如果 $c = \#$,有一堵墙,无法通过。
网格中恰好有一扇门 $A$ 和一扇门 $B$。
相邻单元格之间的状态由字符串 $S_1, S_2, \dots, S_{N-1}$ 和 $T_1, T_2, \dots, T_N$ 给出:
- 对于 $1 \leq i \leq N-1,\ 1 \leq j \leq N$,$(i,j)$ 与 $(i+1,j)$ 之间的状态为 $S_{i,j}$。
- 对于 $1 \leq i \leq N,\ 1 \leq j \leq N-1$,$(i,j)$ 与 $(i,j+1)$ 之间的状态为 $T_{i,j}$。
如果从 $(1,1)$ 出发,仅通过上、下、左、右移动且不经过墙,可以到达 $(N,N)$,则称该网格为**良好状态**。
现在你将封锁部分门(除了 $A$ 和 $B$ 外,不包括它们),使其变得不可通行,使得以下条件成立:
- 网格处于良好状态。
- 即使你另外再封锁 $A$ 或 $B$ 中的任意一个,网格仍然处于良好状态。
- 如果你另外同时封锁 $A$ 和 $B$,则网格不再处于良好状态。
问能否满足上述条件?如果可以,求至少要封锁多少扇门。
有 $T$ 组测试数据。请解决每组数据。
输入格式
输入按如下格式给出:
> $T$ $\mathrm{case}_1$ $\mathrm{case}_2$ $\vdots$ $\mathrm{case}_T$
每组测试数据格式如下:
> $N$ $S_1$ $S_2$ $\vdots$ $S_{N-1}$ $T_1$ $T_2$ $\vdots$ $T_N$
输出格式
输出 $T$ 行,第 $i$ 行表示第 $i$ 组测试数据的答案。
对于每组测试数据,如果能满足条件,输出至少需要封锁的门的数量,否则输出 `-1`。
说明/提示
### 样例解释 1
例如在第一个测试数据中,网格已经满足条件,无需操作。
### 约束条件
- $1 \leq T \leq 10^5$
- $2 \leq N \leq 40$
- 每个 $S_i$ 是一个长度为 $N$,只包含 `.`, `D`, `A`, `B`, `#` 的字符串
- 每个 $T_i$ 是一个长度为 $N-1$,只包含 `.`, `D`, `A`, `B`, `#` 的字符串
- $A$ 和 $B$ 分别恰好出现一次,在所有 $S_{i,j}$ 和 $T_{i,j}$ 中
- 所有测试数据的 $N^2$ 之和不超过 $2 \times 10^5$
- 所有测试数据的 $N^4$ 之和不超过 $40^4$。
由 ChatGPT 5 翻译