把数组按顺序两两分成若干个包:
你有一条长度为 n 的整数序列 a1,a2,…,an。现在需要将其按相邻顺序两两打包:第 1 个包包含 (a1,a2),第 2 个包包含 (a3,a4),依此类推。若 n 为奇数,则最后一个包只包含单独的 an。
你需要恰好挑选 x 个包,并从每个被挑选的包中取出恰好一个元素。问是否存在一种挑选方案,使得取出的所有元素之和为奇数。
数据范围:测试数据组数 t 满足 1≤t≤104;每组中 n 满足 1≤n≤2imes105;x 满足 1≤x≤⌈n/2⌉;元素 ai 满足 0≤ai≤109。所有测试数据的 n 之和不超过 2imes105。
第一行输入一个整数 t,表示测试数据组数。接下来是 t 组数据,每组数据的格式如下: 第一行包含两个整数 n 和 x; 第二行包含 n 个整数,依次为 a1,a2,…,an。
对于每组测试数据,输出一行。若存在可行方案,输出 Yes;否则输出 No。
输入
1
4 2
1 2 3 4
输出
Yes
说明
序列长度为 4,形成两个双元素包:(1,2) 和 (3,4)。这两个包都是一奇一偶(即“灵活包”,mix)。由于存在灵活包,在挑选 x=2 个包时,我们可以根据需要调整选择奇数或偶数,保证取出的两个数中奇数个数为奇数。例如选择 1 和 4,和为 5(奇数),因此答案为 Yes。
输入
1
4 2
1 1 2 2
输出
Yes
说明
序列分成两个双元素包:(1,1) 为“全奇包”(odd),只能选出奇数;(2,2) 为“全偶包”(even),只能选出偶数。
需要挑选 x=2 个包,设选择 k 个全奇包和 2−k 个全偶包。为使总和为奇数,k 必须为奇数。此处唯一可行方案为 k=1,即选一个全奇包和一个全偶包,取出 1(奇)和 2(偶),总和 3 为奇数,因此可行。
输入
1
1 1
2
输出
No
说明
序列长度为奇数 1,形成单元素包 (2)。该包为偶数,属于“全偶包”。
必须挑选 x=1 个包,只能选出偶数 2,总和为偶数,无法得到奇数和,因此输出 No。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册