1 条题解

  • 0
    @ 2026-1-5 0:34:33

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

    p=max⁡i=1naip = \max _{i = 1} ^n a_i q=min⁡i=1naiq = \min _{i = 1} ^n a_i r=p−qr = p - q s=(∑i=1nai) mod 2s = \left( \sum _{i = 1} ^n a_i \right) \bmod 2

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

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

    情况 1

    r≥kr \ge k,后手获胜。

    情况 2

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

    情况 3

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

    情况 4

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

    情况 5

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

    情况 6

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

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

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

    • 根据上面的论断可知 r=k−2r = k - 2 和 r=0r = 0 不同时成立。
    • 于是先手对最大值操作,依然有 r≤k−2r \le k - 2。
    • 如果后手接下来的操作使得 r=k−1r = k - 1,则根据上面的论断可知先手获胜。
    • 否则仍然有 r≤k−2r \le 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;
    }
    
    • 1

    [2026 January TFOJ Easy Round] Simple Range Game

    信息

    ID
    206
    时间
    1000ms
    内存
    512MiB
    难度
    7
    标签
    递交数
    18
    已通过
    4
    上传者