#CF2077F. AND 与 OR 操作
AND 与 OR 操作
F. AND 与 OR 操作
每个测试点的时间限制:5 秒
内存限制:1024 MB
假设有两个数组 和 ,长度均为 。
称数对 是好的,如果可以通过任意次以下操作将 变为 :
- 选择两个不同的下标 和 (,)以及一个非负整数 ()。
然后进行如下变换:- ,其中 表示按位与操作。
- ,其中 表示按位或操作。
现在给定两个数组 和 ,长度均为 ,每个元素都是不超过 的非负整数。
你可以对这两个数组执行任意次以下两种操作:
- 选择一个下标 (),将 增加 ()。
- 选择一个下标 (),将 增加 ()。
注意,在执行操作过程中, 和 的元素可能暂时超过 。
求使得 成为好的数对所需的最少操作次数。
输入格式
每个测试点包含多个测试用例。
第一行包含一个整数 (),表示测试用例的数量。
接下来每个测试用例的描述如下:
- 第一行包含两个整数 和 (),分别表示数组长度以及数组中元素的最大可能值。
- 第二行包含 个整数 (),表示数组 。
- 第三行包含 个整数 (),表示数组 。
此外,保证所有测试用例中 的总和以及 的总和均不超过 。
输出格式
对于每个测试用例,输出一个整数,表示使 成为好的数对所需的最少操作次数。
样例输入
5
4 3
0 1 2 3
0 1 2 3
3 32
8 9 32
8 6 32
5 64
5 7 16 32 64
4 8 16 32 64
4 11
9 1 4 3
8 11 6 2
5 10
7 9 5 4 2
3 10 6 5 9
样例输出
0
2
2
0
1
样例解释
- 第一个样例中,已经有 。
- 第二个样例中,可以对 执行两次操作 2。数组 变为 ,此时 是好的。
- 第三个样例中,可以先对 执行操作 2,再对 执行操作 1,可以证明无法用少于 2 步达成。