AT_abc429_f [ABC429F] Shortest Path Query

题目描述

给你一个包含三行 $N$ 列的网格。我们用从上到下的第 $i$ 行、从左到右的第 $j$ 列的单元格记作 $(i,j)$。若 $S_{i,j}$ 为 `#`,则 $(i,j)$ 是墙格,否则为 `.` 时,$(i,j)$ 是空格且可通过。 现在有 $Q$ 个查询,请按顺序依次处理。 每个查询给出整数 $r$ 和 $c$,你需要将 $(r,c)$ 这一格的状态反转。如果该格原本是墙格,请改为空格,原本是空格则改为墙格。然后,输出以下问题的答案: > 设你从 $(1,1)$ 出发,每次只能走到相邻的上、下、左、右的空格,能否到达 $(3,N)$?如果能到达,请输出最少需要多少步。

输入格式

输入从标准输入读入,格式如下: > $N$ > $S_{1,1}S_{1,2}\ldots S_{1,N}$ > $S_{2,1}S_{2,2}\ldots S_{2,N}$ > $S_{3,1}S_{3,2}\ldots S_{3,N}$ > $Q$ > $\text{query}_1$ > $\text{query}_2$ > $\vdots$ > $\text{query}_Q$ 每个查询的格式为: > $r\ c$

输出格式

请输出 $Q$ 行。 对于第 $i$ 次查询($1\le i\le Q$),若此时 $(1,1)$ 无法到达 $(3,N)$,请输出 `-1`,否则输出最少所需的步数。

说明/提示

### 样例解释 1 第一次查询,将 $(1,2)$ 的状态反转。此时网格变为: ``` ..... .#.#. ...#. ``` 此时,可以依次经过 $(1,1)$、$(1,2)$、$(1,3)$、$(1,4)$、$(1,5)$、$(2,5)$、$(3,5)$,共需 6 步到达 $(3,5)$。 第二次查询,再次将 $(1,2)$ 状态反转。此时网格变为: ``` .#... .#.#. ...#. ``` 此时,可以依次经过 $(1,1)$、$(2,1)$、$(3,1)$、$(3,2)$、$(3,3)$、$(2,3)$、$(1,3)$、$(1,4)$、$(1,5)$、$(2,5)$、$(3,5)$,共需 10 步到达 $(3,5)$。 第三次查询,将 $(2,3)$ 状态反转。此时网格变为: ``` .#... .###. ...#. ``` 此时,无论如何移动,都无法从 $(1,1)$ 到达 $(3,5)$。 ### 数据范围 - $2\le N\le 2\times 10^5$ - $S_{i,j}$ 只可能是 `#` 或 `.`。 - $S_{1,1}=S_{3,N}=.$ - $1\le Q\le 2\times 10^5$ - $1\le r\le 3$ - $1\le c\le N$ - $(r,c)\neq (1,1),\ (3,N)$ - $N, Q, r, c$ 均为整数。 由 ChatGPT 5 翻译