CF1611G Robot and Candies

题目描述

Polycarp 有一个 $n \times m$ 的矩形田地(田地的总格数 $n \cdot m$ 不超过 $10^6$,且 $m \ge 2$),每个格子里可能有糖果。田地有 $n$ 行 $m$ 列。 我们用 $(x, y)$ 表示第 $x$ 行第 $y$ 列的格子。左上角的格子为 $(1, 1)$,右下角的格子为 $(n, m)$。 如果某格子有糖果,则用符号 '1' 标记,否则用符号 '0' 标记。 Polycarp 制作了一个可以收集糖果的机器人。机器人可以从 $(x, y)$ 移动到 $(x+1, y+1)$ 或 $(x+1, y-1)$。如果机器人所在的格子有糖果,则会收集该糖果。 只要田地上还有糖果,Polycarp 就会执行如下操作: - Polycarp 将机器人放在田地最上面一行的任意一个格子中。他可以自行选择放置的位置。允许多次将机器人放在同一个格子。 - 机器人在田地中移动并收集糖果。Polycarp 控制机器人的移动。 - 当机器人离开田地后,Polycarp 会取回机器人。如果田地上还有糖果,Polycarp 会重复上述过程。 请你计算,Polycarp 至少需要多少次将机器人放在田地最上面一行,才能收集完所有糖果。保证 Polycarp 总能收集完所有糖果。

输入格式

输入的第一行为一个整数 $t$($1 \le t \le 10^4$),表示数据组数。 每组数据前有一个空行。接下来一行包含两个整数 $n$ 和 $m$($2 \le m$,$2 \le n \cdot m \le 10^6$),表示田地的大小。接下来有 $n$ 行,第 $i$ 行是一个长度为 $m$ 的字符串,描述第 $i$ 行的田地。'1' 表示该格有糖果,'0' 表示该格为空。 保证所有数据组的 $n \cdot m$ 之和不超过 $10^6$。

输出格式

输出 $t$ 行,每行一个整数,表示对应数据组 Polycarp 至少需要多少次将机器人放在田地最上面一行,才能收集完所有糖果。

说明/提示

在第一组数据中,Polycarp 可以不需要放置机器人,因此答案是“0”。 在第二组数据中,Polycarp 需要放置机器人两次。第一次可以将机器人放在 $(1, 1)$,收集 $(1, 1)$ 和 $(3, 3)$ 的糖果。第二次再次放在 $(1, 1)$,机器人可以先移动到 $(2, 2)$,再到 $(3, 1)$,收集最后一个糖果。 在第四组数据中,可以证明机器人无法在三次内收集完所有糖果。 由 ChatGPT 4.1 翻译