先把式子按二进制位拆开看。
设当前考虑第 k 位,权值为 2k。 由于按位与、按位异或、按位或都是“逐位独立”计算的,所以这一位对总答案的贡献,只和:
在通信系统测试中,工程师设置了一条包含 n 个信号节点的链路,每个节点 i 有一个基准功率 Ai 和一个操作码 Pi(可能为 '1'、'2' 或 '3')。系统允许引入一个调试参数 x,且 x 必须从区间 [1,r] 中选取。
对于每一个节点 i,根据操作码 Pi 会按以下方式计算一个叠加功率:
'1',则叠加功率为 Ai&x(按位与:二进制对应位均为 1 时结果位为 1,否则为 0);'2',则叠加功率为 Ai⊕x(按位异或:二进制对应位不同则结果位为 1,相同则为 0);'3',则叠加功率为 Ai∣x(按位或:二进制对应位只要有一个为 1 结果位即为 1)。整个链路的总叠加功率定义为:
V(x)=i=1∑ng(Ai,Pi,x)你的任务是选择一个合适的 x(1≤x≤r),使得总叠加功率 V(x) 最大化,并输出这个最大值。
数据规模:
2×10^5;2×10^5,参数上限 r 不超过 10^9;10^9;4×10^5;'1'、'2'、'3' 构成。第一行输入一个整数 t,表示测试数据组数。
接下来每组数据按以下格式给出:
第一行包含两个整数 n 和 r,分别表示节点个数和参数上限。
第二行包含 n 个整数 A1,A2,…,An,表示各节点的基准功率。
第三行包含一个长度为 n 的字符串,仅由字符 '1'、'2'、'3' 组成,依次表示每个节点的操作码。
对于每组测试数据,输出一行一个整数,表示能达到的最大总叠加功率 max1≤x≤rV(x)。
输入
1
1 5
3
1
输出
3
说明
只有一个节点,基准功率 A1=3,操作码为 '1'(按位与),参数上限 r=5。x 只能在区间 [1,5] 中选取。计算不同 x 的叠加功率:
3,因此最大总叠加功率为 3。输入
1
2 6
2 4
23
输出
12
说明
两个节点,基准功率分别为 2 和 4,操作码依次为 '2'(按位异或)和 '3'(按位或),上限 r=6。
考虑每个比特位的贡献。可以验证 x=5 时总叠加功率最大:
12。输入
1
3 8
5 7 6
321
输出
28
说明
三个节点,基准功率依次为 5、7、6,操作码依次为 '3'(按位或)、'2'(按位异或)、'1'(按位与),上限 r=8。
通过分析各比特位贡献,取 x=8 可获得最大总和:
28。输入
1
1 1
0
1
输出
0
说明
只有一个节点,基准功率 A1=0,操作码为 '1'(按位与),上限 r=1。x 只能取 1。叠加功率为 0&1=0,因此最大值为 0。该样例展示了在必须选择 x≥1 的前提下,最大值可能为 0。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册