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 翻译