传统题 1000ms 256MiB

两极反转!!!

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述

给你两个长度相同的二进制字符串 a 和 b。

你可以进行以下任意操作:

  • 在 a 中选择等于 001 的子串并替换为 100,反之亦然(即 001 → 100 或 100 → 001)。
  • 在 a 中选择等于 110 的子串并替换为 011,反之亦然(即 011 → 110 或 110 → 011)。

你的任务是确定将字符串 a 转换为字符串 b 所需的最少操作数。如果无法通过给定操作将 a 转换为 b,则输出 -1。

输入格式

第一行包含一个整数 t(1 ≤ t ≤ 10^4)——测试用例的数量。

接下来是 t 个测试用例的描述:

  • 第一行包含一个整数 n(1 ≤ n ≤ 2 × 10^5)——每个字符串的长度。
  • 第二行包含一个二进制字符串 a(|a| = n),仅由字符 0 和 1 组成。
  • 第三行包含一个二进制字符串 b(|b| = n),仅由字符 0 和 1 组成。

保证所有测试用例中 n 的总和不超过 2 × 10^5。

输出格式

对于每个测试用例,输出将 a 转换为 b 所需的最少操作数。如果不可能,则输出 -1。

示例

输入

text****编辑

5
4
0100
0001
4
0100
0010
6
110000
000011
8
10101010
10101010
5
01001
10010

输出

text****编辑

1
-1
4
0
3

示例说明

第一个测试用例:可以选择子串 a[2,4] = 100 并将其替换为 001,恰好需要 1 次操作。

第二个测试用例:无法将 a 转换为 b,因此答案为 -1。 在第三个测试案例中,我们可以依次进行以下操作: 初始状态:110000 第1次操作,将第2到第4位的 100 替换为 001: 110000 -> 100100 第2次操作,将第4到第6位的 100 替换为 001: 100100 -> 100001 第3次操作,将第1到第3位的 100 替换为 001: 100001 -> 001001 第4次操作,将第3到第5位的 100 替换为 001: 001001 -> 000011 共需要 4 次操作。可以证明 4 是最小值。

共需要 4 次操作,可以证明 4 是最小值。

2026ACM新生积分赛 Round #2

未参加
状态
已结束
规则
ACM/ICPC
题目
13
开始于
2026-10-25 13:00
结束于
2026-10-25 18:00
持续时间
5 小时
主持人
参赛人数
45