题意:从数组a中选出x个数,并且这x个数的和等于奇数,求是否能组成奇数。
分析:
我们先统计奇数个数和偶数个数,可以看出图片里面的规律,奇数 + 奇数 = 偶数,奇数 + 偶数 = 偶数,也就是我们必须要有奇数个奇数,才能组成奇数的和,而偶数对和是没有影响的,奇数加偶数还是奇数,那么我们i 遍历1, 3, 5, 7,这些个数,然后用x去减去i,就是我们用偶数去填补的,注意减去后的偶数个数必须是>=0,大多数wa3都是这里的原因。(悲伤!)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n, x;
scanf("%d%d", &n, &x);
//奇数个数、偶数个数
int n1 = 0, n2 = 0;
int q;
for (int i = 1; i <= n; ++i)
{
scanf("%d", &q);
if (q & 1) ++n1;
else ++n2;
}
bool flag = false;
for (int i = 1; i <= n1; i += 2)
{
int u = x - i;
if (u <= n2 && u >= 0)
{
flag = true;
puts("Yes");
break;
}
}
if (!flag)
{
puts("No");
}
}
return 0;
}