https://codeforces.com/problemset/problem/1363/A
思路:首先我们要明白三条规则:1. 任意个偶数相加均为偶数 2. 任意个偶数+奇数个奇数为奇数
3. 奇数个奇数相加为奇数
知道以上三种规则就好做了,我们还是分两种情况
第一种情况:k为奇数,此时我们有两种方式都可满足,一是奇数个奇数相加,一是任意个偶数+奇数个奇数,那么我们只需要判断数组中奇数的个数是否满足条件即可
第二种情况:k为偶数,此时只有一种情况可以满足,那就是任意个偶数+奇数个奇数
以下是代码实现:
#include<iostream>
using namespace std;
int a[1010];
void solved()
{
int n,k;
cin>>n>>k;
int cnt1=0,cnt2=0;//cnt1,cnt2分别为奇数和偶数的个数
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]%2==1) cnt1++;
if(a[i]%2==0) cnt2++;
}
if(k%2==1)//如果要找的k个数为奇数,那么我们有两种情况可以组成
{ //一种是 奇数个奇数,一种是偶数+奇数个奇数
if(cnt1>=k)
{
cout<<"Yes"<<endl;
return ;
}
for(int i=0;i<=cnt2;i++)//依次对偶数的个数进行判断
{
if((k-i)%2==1&&cnt1>=(k-i))//如果能满足奇数个奇数就可以
{
cout<<"Yes"<<endl;
return ;
}
}
}
if(k%2==0)//如果k为偶数,那么只有一种情况
{
for(int i=0;i<=cnt2;i++)
{
if((k-i)%2==1&&cnt1>=(k-i))
{
cout<<"Yes"<<endl;
return ;
}
}
}
cout<<"No"<<endl;
return ;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t;
cin>>t;
while(t--)
{
solved();
}
return 0;
}