CF2234D.XOR, Expression and Two Binary Numbers

传统题 时间 2000 ms 内存 256 MiB 8 尝试 3 已通过 1 标签

XOR, Expression and Two Binary Numbers

题目描述

给定整数 kk。存在一个由 nn 位二进制数构成的序列 a1,a2,,a2k+1a_1,a_2,\dots,a_{2^k+1}。其中 a1a_1a2k+1a_{2^k+1} 已知,其余位置数值未知。我们分 kk 轮按照如下规则填充所有未知数值:

第一,假设第 ii 轮开始前,已经填充完毕的下标为 p1<p2<<pmp_1 < p_2 < \dots < p_m。第一轮开始前仅下标 1,2k+11,2^k+1 有数值。

第二,对每个 j[1,m1]j \in [1,m-1],执行赋值

$$a_{\frac{p_j+p_{j+1}}{2}} := a_{p_j} \oplus a_{p_{j+1}}$$

第三,所有赋值操作同时进行,操作完成后这些新下标也变为已填充状态。

可以证明,该过程一定能填满整个序列。

k=2,n=3k=2,n=3 为例,初始 a1=010, a5=110a_1=\texttt{010},\ a_5=\texttt{110}: 第一步,第一轮前仅 1,51,5 有值,计算

$$a_3 = a_1 \oplus a_5 = \texttt{010} \oplus \texttt{110} = \texttt{100}$$

第二步,第二轮前已填充下标为 1,3,51,3,5,同步算出

$$a_2 = a_1 \oplus a_3 = \texttt{110},\quad a_4 = a_3 \oplus a_5 = \texttt{010}$$

你需要计算表达式:

x1y1+x2y2++x2k+1y2k+1x_1 y_1 + x_2 y_2 + \dots + x_{2^k+1} y_{2^k+1}

其中 xix_i 表示 aia_i 中二进制位为 1\texttt{1} 的数量,yiy_i 表示 aia_i 中二进制位为 0\texttt{0} 的数量。

注:xyx \oplus y 表示两数按位异或。

输入格式

本题包含多组测试数据。第一行输入整数 tt,满足

$$1 \le t \le 10^4,\quad 1 \le n \le 10^5,\quad 1 \le k \le 30$$

代表测试数据组数。

每组测试数据描述如下: 第一行两个整数 n,kn,k,分别代表二进制数的位数、控制序列长度的参数。 第二行输入长度为 nn 的二进制字符串 ss,代表 a1a_1。 第三行输入长度为 nn 的二进制字符串 zz,代表 a2k+1a_{2^k+1}

保证所有测试数据的 nn 之和不超过 10510^5

输出格式

对每组测试用例,输出题目中表达式的计算结果。

说明/提示

第一组测试用例的填充过程已在题目描述中给出,最终序列为 $[\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}$$

整个序列所有数均为 00,表达式结果为 00

样例

4
3 2
010
110
1 1
0
0
2 2
01
00
7 30
1010111
0011010
10
0
3
12169074016

在线编程 IDE

建议全屏模式获得最佳体验