CF1933F Turtle Mission: Robot and the Earthquake

题目描述

这个世界是一个有 $n$ 行 $m$ 列的网格。行编号为 $0, 1, \ldots, n-1$,列编号为 $0, 1, \ldots, m-1$。在这个世界中,列是循环的(即每一列的最上方和最下方的格子是相邻的)。第 $i$ 行第 $j$ 列的格子($0 \le i < n, 0 \le j < m$)记作 $(i,j)$。 在时间 $0$ 时,格子 $(i,j)$($0 \le i < n, 0 \le j < m$)中可能有一块石头,也可能什么都没有。格子 $(i,j)$ 的状态可以用整数 $a_{i,j}$ 描述: - 如果 $a_{i,j} = 1$,则 $(i,j)$ 处有一块石头。 - 如果 $a_{i,j} = 0$,则 $(i,j)$ 处没有石头。 由于地震的余震,所有列会像板块运动一样循环向上移动,每单位时间每列向上移动 $1$ 格。具体来说,对于某个 $0 \le i < n, 0 \le j < m$,如果 $(i,j)$ 此时有一块石头,它会从 $(i, j)$ 移动到 $(i-1, j)$(如果 $i=0$,则移动到 $(n-1, j)$)。 机器人 RT 初始位于 $(0,0)$。它需要前往 $(n-1,m-1)$ 执行地震救援任务(即右下角的格子)。地震不会改变机器人的位置,只会改变石头的位置。 设 RT 当前位于 $(x,y)$($0 \le x < n, 0 \le y < m$),它可以执行以下操作: - 循环向上移动一格,即从 $(x,y)$ 移动到 $((x+n-1) \bmod n, y)$,耗时 $1$ 单位时间。 - 循环向下移动一格,即从 $(x,y)$ 移动到 $((x+1) \bmod n, y)$,耗时 $1$ 单位时间。 - 向右移动一格,即从 $(x,y)$ 移动到 $(x, y+1)$,耗时 $1$ 单位时间。(仅当 $y < m-1$ 时可以执行此操作。) 注意,RT 不能向左移动,也不能停留在原地。 不幸的是,如果 RT 与石头相撞会爆炸。因此,当 RT 位于 $(x,y)$ 时,如果 $((x+1) \bmod n, y)$ 或 $((x+2) \bmod n, y)$ 有石头,RT 不能向下移动,否则会被石头击中。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1933F/e6c2eefb52b92661f33f40565f8703b698e45850.png) 同样地,如果 $y+1 < m$ 且 $((x+1) \bmod n, y+1)$ 有石头,RT 不能向右移动,否则会被石头击中。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1933F/fb10a6984c9e2fa62a504f01d0bebb40cf60e8a4.png) 但需要注意的是,如果 $(x \bmod n, y+1)$ 和 $((x+1) \bmod n, y)$ 都有石头,RT 依然可以安全地向右移动。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1933F/7a53bd04bd2915c103d70abe831abd04969b7ef5.png) 请你计算 RT 到达 $(n-1,m-1)$ 且不与任何石头相撞所需的最少时间。如果无法到达,输出 $-1$。

输入格式

输入的第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。 每个测试用例的第一行包含两个整数 $n$、$m$($3 \le n, m \le 10^3$),表示星球的边界大小。 接下来的 $n$ 行,每行包含 $m$ 个整数。第 $(i+1)$ 行第 $(j+1)$ 个整数($0 \le i < n, 0 \le j < m$)为 $a_{i,j}$,表示在时间 $0$ 时 $(i,j)$ 是否有石头。 另外,保证 $a_{0,0} = 0$,且对于 $0 \le i < n$,$a_{i, m-1} = 0$。也就是说,RT 的初始位置以及第 $m-1$ 列都没有石头。 所有测试用例中 $n \cdot m$ 的总和不超过 $10^6$。

输出格式

对于每个测试用例: - 如果可以在不与任何石头相撞的情况下到达终点,输出一个整数——RT 到达 $(n-1,m-1)$ 所需的最少时间。 - 否则,输出 $-1$。

说明/提示

下图为样例第一个测试用例的可视化说明: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1933F/765b33690d3fb490f30273f591cef774fd4d800f.png) 由 ChatGPT 4.1 翻译