#CF2234D. 异或、表达式与两个二进制数 / XOR, Expression and Two Binary Numbers
异或、表达式与两个二进制数 / XOR, Expression and Two Binary Numbers
题目描述
给定一个整数 。有一个由 位二进制数组成的序列 。其中 和 已知,其余未知。未知的数按如下方式经过 步填充:
- 假设在第 步之前,下标为 的数已经被填充。(在第一步之前,已填充的是下标为 和 的数。)
- 对于每个 从 到 ,执行赋值 $a_{\frac{p_j + p_{j + 1}}{2}} := a_{p_j} \oplus a_{p_{j + 1}}$。
- 这些赋值同时进行,之后所有这些数也变为已填充。
可以证明该过程总能将所有数填充完整。
以下是 、 时的过程示例,初始 ,:
- 第一步之前,下标为 的数已填充。因此执行 $a_3 := a_1 \oplus a_5 = \texttt{010} \oplus \texttt{110} = \texttt{100}$。
- 第二步之前,下标为 的数已填充。因此执行 和 。
你需要计算以下表达式的值:$x_1 \cdot y_1 + x_2 \cdot y_2 + \ldots + x_{2^k + 1} \cdot y_{2^k + 1}$,其中 是第 个数中 的个数, 是第 个数中 的个数。
表示 和 的按位异或。
输入格式
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是每个测试用例的描述。
每个测试用例的第一行包含两个整数 (,)—— 二进制数的长度和决定序列中二进制数数量的参数。
每个测试用例的第二行包含一个长度为 的二进制字符串 ()—— 的值。
每个测试用例的第三行包含一个长度为 的二进制字符串 ()—— 的值。
保证所有测试用例的 之和不超过 。
输出格式
对于每个测试用例,输出一个整数 —— 题目描述中表达式的值。
4
3 2
010
110
1 1
0
0
2 2
01
00
7 30
1010111
0011010
10
0
3
12169074016
提示
在第一个测试用例中,过程在题目描述中已有说明。最终得到的二进制数序列为 $[\texttt{010}, \texttt{110}, \texttt{100}, \texttt{010}, \texttt{110}]$。则题目中的表达式等于 $1 \cdot 2 + 2 \cdot 1 + 1 \cdot 2 + 1 \cdot 2 + 2 \cdot 1 = 10$。
在第二个测试用例中,第一步有 $a_2 = a_1 \oplus a_3 = \texttt{0} \oplus \texttt{0} = \texttt{0}$。因此最终数序列为 ,表达式的值为 。