将宝匣按题目方式分组:第 1 个宝匣对是 (a1,a2),第 2 个宝匣对是 (a3,a4),…… 若 n 为奇数,则最后一个宝匣单独成一队(只有一个元素 an)。
现在要恰好选出 x 个可选择的单位(宝匣对或单独宝匣),并从每个被选中的单位里恰好取出一个宝石,使这 x 个宝石的价值之和为奇数。为叙述方便,下文将宝匣对和单独宝匣统称为“组”。
核心是只关心奇偶性,因此可以把每个组分成三类:
探险家发现了一排共 n 个宝箱,从左到右编号为 1 到 n,第 i 个宝箱内装有价值为 ai 的宝石。探险家需要按顺序将这些宝箱两两划为一组:第 1 和 2 个宝箱为第一组,第 3 和 4 个宝箱为第二组,以此类推。若 n 为奇数,则最后一个宝箱单独成为一组。
探险家计划恰好打开 x 组宝箱,并从每一组被打开的两个(或一个)宝箱中,挑选恰好一个宝箱取出其中的宝石。他的目标是让所有取出的宝石的总价值为奇数。
请你判断是否存在一种选择方案,使得总价值为奇数。
约束条件:
第一行输入一个整数 t,表示测试数据组数。 接下来对于每组测试数据,按以下格式给出: 第一行包含两个整数 n 和 x,分别表示宝箱数量与需要打开的小组数量。 第二行包含 n 个整数 a1,a2,…,an,表示每个宝箱内宝石的价值。
对于每组测试数据,输出一行,若存在一种方案使得取出宝石的总价值为奇数,输出 "Yes",否则输出 "No"。
输入
4
4 2
1 2 3 4
4 2
1 3 2 4
4 2
1 3 5 7
1 1
2
输出
Yes
Yes
No
No
说明
第一组数据:n=4,x=2,宝箱价值为 1 2 3 4。按顺序分组为 (1,2) 和 (3,4)。每组内两个宝箱的奇偶性均不相同(一个奇数一个偶数),属于灵活盒子(mix)。只要存在灵活盒子,就可以通过调整选择来改变总和的奇偶性,因此必定能选出奇数总和,输出 Yes。
第二组数据:宝箱价值为 1 3 2 4。分组为 (1,3) 和 (2,4)。第一组两个奇数(odd),第二组两个偶数(even),没有灵活盒子。需要打开 x=2 组,设选择 odd 组的数量为 k。总和奇偶性只取决于 k 的奇偶性,因此 k 必须为奇数。由 x=2 和 even 组个数为 1,可得 k≥2−1=1,且 k≤min(2,1)=1,因此 k 只能取 1,恰为奇数,方案存在,输出 Yes。
第三组数据:宝箱价值为 1 3 5 7。两组均为奇数,odd=2,even=0。打开 x=2 组需要选 k 个 odd 组。此时 k 只能取 2(偶数),无法得到奇数个 odd 组,总和必定为偶数,输出 No。
第四组数据:n=1,x=1,唯一宝箱价值为 2(偶数)。只能选择该偶数,总和为偶数,无法得到奇数,输出 No。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.