CF1504B Flip the Bits

题目描述

有一个长度为 $n$ 的二进制字符串 $a$。每次操作,你可以选择 $a$ 的任意一个前缀(即从第一个字符开始的连续若干字符),要求该前缀中 $0$ 和 $1$ 的数量相等。然后将该前缀中的所有字符取反:每个 $0$ 变成 $1$,每个 $1$ 变成 $0$。 例如,假设 $a=0111010000$。 - 第一次操作时,可以选择长度为 $8$ 的前缀,因为其中有 $4$ 个 $0$ 和 $4$ 个 $1$:$[01110100]00\to [10001011]00$。 - 第二次操作时,可以选择长度为 $2$ 的前缀,因为其中有 $1$ 个 $0$ 和 $1$ 个 $1$:$[10]00101100\to [01]00101100$。 - 第三次操作时,不能选择长度为 $4$ 的前缀,因为其中有 $3$ 个 $0$ 和 $1$ 个 $1$,不满足数量相等。 你能否通过有限次(也可以不操作)这样的操作,将字符串 $a$ 变成字符串 $b$?

输入格式

第一行包含一个整数 $t$($1\le t\le 10^4$),表示测试用例的数量。 每个测试用例的第一行包含一个整数 $n$($1\le n\le 3\cdot 10^5$),表示字符串 $a$ 和 $b$ 的长度。 接下来的两行分别为长度为 $n$ 的字符串 $a$ 和 $b$,仅由字符 $0$ 和 $1$ 组成。 所有测试用例中 $n$ 的总和不超过 $3\cdot 10^5$。

输出格式

对于每个测试用例,如果可以将 $a$ 变成 $b$,输出 "YES";否则输出 "NO"。你可以用大写或小写字母输出。

说明/提示

第一个测试用例见题面说明。 第二个测试用例中,可以通过 $0$ 次操作将 $a$ 变成 $b$。 第三个测试用例中,没有合法的操作,因此无法将 $a$ 变成 $b$。 第四个测试用例中,以下是一种可行的变换方式: - 选择长度为 $2$ 的前缀,得到 $100101010101$。 - 选择长度为 $12$ 的前缀,得到 $011010101010$。 - 选择长度为 $8$ 的前缀,得到 $100101011010$。 - 选择长度为 $4$ 的前缀,得到 $011001011010$。 - 选择长度为 $6$ 的前缀,得到 $100110011010$。 第五个测试用例中,唯一的合法操作是将 $a$ 变成 $111000$。此后,唯一的合法操作是回到最初的字符串,因此无法将 $a$ 变成 $b$。 由 ChatGPT 4.1 翻译