AT_arc193_d [ARC193D] Magnets

题目描述

[problemUrl]: https://atcoder.jp/contests/arc193/tasks/arc193_d 给定两个仅由 `0` 和 `1` 组成的长度为 $N$ 的字符串 $A = A_1A_2\ldots A_N$ 和 $B = B_1B_2\ldots B_N$。 有 $N$ 个单元格从左到右排成一列。对于 $i = 1, 2, \ldots, N$,左数第 $i$ 个单元格称为单元格 $i$。初始时,若 $A_i = $ `1`,则单元格 $i$ 放置 $1$ 个棋子;若 $A_i = $ `0`,则单元格 $i$ 没有棋子。 你可以进行任意次数(包括 $0$ 次)的以下操作: 1. 首先选择整数 $i$($1 \leq i \leq N$)。 2. 然后,将所有棋子**同时**向单元格 $i$ 靠近的方向移动 $1$ 个单元格。具体规则如下:设某个棋子移动前的位置为单元格 $j$,移动后的位置为单元格 $j'$, - 若 $i < j$,则 $j' = j - 1$; - 若 $i > j$,则 $j' = j + 1$; - 若 $i = j$,则 $j' = j$。 请判断是否可以通过上述操作使网格满足以下条件,若可能,还需输出达成该条件所需的最小操作次数: > 对于所有 $i = 1, 2, \ldots, N$,当且仅当 $B_i = $ `1` 时,单元格 $i$ 中存在至少 $1$ 个棋子。 给定 $T$ 个独立的测试用例,请分别输出每个用例的答案。

输入格式

输入通过标准输入给出,格式如下: > $T$ > $\mathrm{case}_1$ > $\mathrm{case}_2$ > $\vdots$ > $\mathrm{case}_T$ 其中,$\mathrm{case}_i$ 表示第 $i$ 个测试用例。每个测试用例的格式为: > $N$ $A$ $B$

输出格式

输出 $T$ 行。对于第 $i$ 个测试用例: - 若无法满足条件,输出 `-1`; - 若可以满足条件,输出所需的最小操作次数。

说明/提示

### 约束条件 - $1 \leq T \leq 2 \times 10^5$ - $1 \leq N \leq 10^6$ - $T, N$ 为整数 - $A, B$ 均为仅由 `0` 和 `1` 组成的长度为 $N$ 的字符串 - 存在至少一个 $i$ 满足 $A_i = $ `1` - 存在至少一个 $i$ 满足 $B_i = $ `1` - 所有测试用例的 $N$ 之和不超过 $10^6$ ### 样例解释 1 输入包含 $3$ 个独立测试用例。对于第 $1$ 个测试用例: - 初始棋子分布为 $(0, 1, 0, 0, 1, 1, 0, 1)$ - 通过以下 $3$ 次操作可达成目标: 1. 选择 $i = 5$,分布变为 $(0, 0, 1, 0, 2, 0, 1, 0)$ 2. 选择 $i = 8$,分布变为 $(0, 0, 0, 1, 0, 2, 0, 1)$ 3. 选择 $i = 8$,分布变为 $(0, 0, 0, 0, 1, 0, 2, 1)$ - 无法在少于 $3$ 次操作内达成目标,因此输出 $3$ 对于第 $2$ 个测试用例,无论如何操作都无法满足条件,因此输出 `-1`。 翻译由 DeepSeek R1 完成