题目描述
Mike 收到一个长度为 n 的数组 a 作为生日礼物,他决定测试这个数组有多“漂亮”。
如果存在一种方式,经过若干次(可以为零次)切分操作后,能够得到一个元素和为 si 的数组,则该数组通过第 i 次漂亮性测试。
数组切分操作的定义如下:
- 设 $mid = \left\lfloor\frac{\max(array) + \min(array)}{2}\right\rfloor$,其中 max 和 min 分别表示数组中的最大值和最小值。也就是说,mid 是最大值与最小值之和除以 2 并向下取整。
- 然后将数组分为两部分 left 和 right。left 包含所有小于等于 mid 的元素,right 包含所有大于 mid 的元素。left 和 right 中的元素顺序与原数组保持一致。
- 第三步,选择保留 left 或 right 中的一个数组,丢弃另一个。被选中的数组替换当前数组,未被选中的数组永久丢弃。
你需要帮助 Mike 判断 q 次漂亮性测试的结果。
注意,每次漂亮性测试都是针对原始数组 a 进行的,因此每次测试都从初始数组 a 开始。也就是说,第一次切分(如果需要)总是在数组 a 上进行。
输入格式
每个测试包含一个或多个测试用例。第一行包含测试用例数 t(1≤t≤100)。
每个测试用例的第一行包含两个整数 n 和 q(1≤n,q≤105),分别表示数组 a 的长度和漂亮性测试的次数。
每个测试用例的第二行包含 n 个整数 a1,a2,...,an(1≤ai≤106),表示数组 a 的内容。
接下来的 q 行,每行包含一个整数 si(1≤si≤109),表示 Mike 希望在第 i 次测试中得到的元素和。
保证所有测试用例中 n 的总和与 q 的总和不超过 105(∑n,∑q≤105)。
输出格式
输出 q 行,每行输出一次漂亮性测试的结果。如果通过测试,输出 "Yes";否则输出 "No"。
说明/提示
第一个测试用例的解释:
- 可以通过如下方式得到元素和为 s1=1 的数组:
1.1 a=[1,2,3,4,5],mid=21+5=3,left=[1,2,3],right=[4,5]。选择保留 left。
1.2 a=[1,2,3],mid=21+3=2,left=[1,2],right=[3]。选择保留 left。
1.3 a=[1,2],mid=21+2=1,left=[1],right=[2]。选择保留 left,此时和为 1。
- 可以证明无法得到元素和为 s2=8 的数组。
- 可以通过如下方式得到元素和为 s3=9 的数组:
3.1 a=[1,2,3,4,5],mid=21+5=3,left=[1,2,3],right=[4,5]。选择保留 right,此时和为 9。
- 可以证明无法得到元素和为 s4=12 的数组。
- 可以通过如下方式得到元素和为 s5=6 的数组:
5.1 a=[1,2,3,4,5],mid=21+5=3,left=[1,2,3],right=[4,5]。选择保留 left,此时和为 6。
第二个测试用例的解释:
- 可以证明无法得到元素和为 s1=1 的数组。
- 可以通过如下方式得到元素和为 s2=2 的数组:
2.1 a=[3,1,3,1,3],mid=21+3=2,left=[1,1],right=[3,3,3]。选择保留 left,此时和为 2。
- 可以证明无法得到元素和为 s3=3 的数组。
- 可以通过如下方式得到元素和为 s4=9 的数组:
4.1 a=[3,1,3,1,3],mid=21+3=2,left=[1,1],right=[3,3,3]。选择保留 right,此时和为 9。
- 元素和为 s5=11 可以不经过任何切分操作直接得到,因为数组的总和就是 11。
由 ChatGPT 4.1 翻译
样例
2
5 5
1 2 3 4 5
1
8
9
12
6
5 5
3 1 3 1 3
1
2
3
9
11
Yes
No
Yes
No
Yes
No
Yes
No
Yes
Yes