https://codeforces.com/problemset/problem/1363/A
分析可以得出,必须得有一个奇数,其它的必须都是偶数结果才会是奇数。当然两奇数和并后是偶数。
所以我们先减1,存一个奇数,剩下的话先拿俩奇数,一对对的拿,应为奇数不够扩展必须俩两拿。
剩下的不够的用偶数来补即可。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],n,t,m;
int main(void)
{
cin>>t;
while(t--)
{
cin>>n>>m;
int cnt1=0,cnt2=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]&1) cnt1++;
else cnt2++;
}
bool flag=false;
if(cnt1)
{
m--,cnt1--;//减一个奇数
while(m>=2&&cnt1>=2) m-=2,cnt1-=2;//先拿奇数
if(cnt2>=m) flag=true;
}
if(flag) puts("Yes");
else puts("No");
}
return 0;
}