我们在下文中沿用以下记号:

p=maxi=1naip = \max _{i = 1} ^n a_i q=mini=1naiq = \min _{i = 1} ^n a_i r=pqr = p - q s=(i=1nai)mod2s = \left( \sum _{i = 1} ^n a_i \right) \bmod 2

下文将「先手获胜当且仅当 s=1s = 1」称为「论断 SS」。

除特殊说明外,后面的情况中不考虑前面的情况。

情况 1

rkr \ge k,后手获胜。

情况 2

p<kp < k,此时只能靠条件 1 取胜,适用论断 SS

情况 3

n=1n = 1,此时只能靠条件 1 取胜,适用论断 SS

情况 4

r=k1r = k - 1,根据上面的论断可知 q>0q > 0,此时先手对最小值操作即可获胜。

情况 5

r=0r = 0k=2k = 2,根据上面的论断可知 q>0q > 0,此时后手和先手做一样的操作即可获胜。

情况 6

考虑某个 r=k1r = k - 1 且「论断 SS」声称先手获胜的中间局面(特别地,此时考虑情况 2):

  • 如果先手能对最小值操作,则获胜。
  • 否则一定有 q=0q = 0,于是 p=k1p = k - 1,适用论断 SS:先手获胜。

继续考虑某个 rk2r \le k - 2 且论断 SS 声称「先手获胜」的中间局面,

  • 根据上面的论断可知 r=k2r = k - 2r=0r = 0 不同时成立。
  • 于是先手对最大值操作,依然有 rk2r \le k - 2
  • 如果后手接下来的操作使得 r=k1r = k - 1,则根据上面的论断可知先手获胜。
  • 否则仍然有 r=k2r = k - 2(一次操作中 rr 变化量的绝对值不会超过 11),回到了此局面。

综上所述,本情况适用论断 SS,并且没有「情况 7」了。

#include <bits/stdc++.h>
using namespace std;
int main()
{
	long long n, k, x, s = 0, c1 = 0, c2 = 1000000000;
	while (cin >> n >> k)
	{
		s = 0;
		c1 = 0;
		c2 = 1000000000;
		for (int i = 1; i <= n; i++)
		{
			cin >> x;
			s += x;
			c1 = max(c1, x);
			c2 = min(c2, x);
		}
		if (c1 - c2 >= k)
		{
			puts("No");
			continue;
		}
		if (c1 - c2 == k - 1 && c2 && n != 1)
		{
			puts("Yes");
			continue;
		}
		if (c1 == c2 && c2 >= 2 && k == 2 && n != 1)
		{
			puts("No");
			continue;
		}
		if (s % 2)
		{
			puts("Yes");
			continue;
		}
		puts("No");
	}
	return 0;
}