CodeForces 1363A. Odd Selection

题意:从数组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;
}













原文地址:https://www.cnblogs.com/pixel-Teee/p/13023263.html