【SDOI2009】E和D

本文详细解读了SDOI2009中E和D游戏的规则与策略,通过表格展示游戏SG函数,揭示了必胜策略,并提供了代码实现。适合组合游戏爱好者深入学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【SDOI2009】E和D

【题目描述】

小E与小W进行一项名为“E&D”游戏。游戏的规则如下:
桌子上有2n堆石子,编号为1..2n。其中,为了方便起见,我们将第2k-1堆与第2k堆(1 ≤ k ≤ n)视为同一组。第i堆的石子个数用一个正整数Si表示。
一次分割操作指的是,从桌子上任取一堆石子,将其移走。然后分割它同一组的另一堆石子,从中取出若干个石子放在被移走的位置,组成新的一堆。操作完成后,所有堆的石子数必须保证大于0。显然,被分割的一堆的石子数至少要为2。
两个人轮流进行分割操作。如果轮到某人进行操作时,所有堆的石子数均为1,则此时没有石子可以操作,判此人输掉比赛。小E进行第一次分割。他想知道,是否存在某种策略使得他一定能战胜小W。因此,他求助于小F,也就是你,请你告诉他是否存在必胜策略。
例如,假设初始时桌子上有4堆石子,数量分别为1,2,3,1。小E可以选择移走第1堆,然后将第2堆分割(只能分出1个石子)。接下来,小W只能选择移走第4堆,然后将第3堆分割为1和2。最后轮到小E,他只能移走后两堆中数量为1的一堆,将另一堆分割为1和1。这样,轮到小W时,所有堆的数量均为1,则他输掉了比赛。故小E存在必胜策略。

【输入】

第一行是一个正整数T(T ≤ 20),表示测试数据数量。接下来有T组数据。
对于每组数据,第一行是一个正整数N,表示桌子上共有N堆石子。其中,输入数据保证N是偶数。
第二行有N个正整数S1..SN,分别表示每一堆的石子数。

【输出】

包含T行。对于每组数据,如果小E必胜,则输出一行”YES”,否则输出”NO”。

【输入样例】

2
4
1 2 3 1
6
1 1 1 1 1 1

【输出样例】

YES
NO

【数据范围】

对于20%的数据,N = 2;
对于另外20%的数据,N ≤ 4,Si ≤ 50;
对于100%的数据,N ≤ 2×10^4,Si ≤ 2×10^9

【题解】

组合游戏,SG定理计算每一组的Nim和。不过这个数据太大了,因此要找规律计算,所以先打表:

0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 4 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 5 
1 1 2 2 1 1 3 3 1 1 2 2 1 1 4 4 1 1 2 2 1 1 3 3 1 1 2 2 1 1 5 5 
0 2 0 2 0 3 0 3 0 2 0 2 0 4 0 4 0 2 0 2 0 3 0 3 0 2 0 2 0 5 0 5 
2 2 2 2 3 3 3 3 2 2 2 2 4 4 4 4 2 2 2 2 3 3 3 3 2 2 2 2 5 5 5 5 
0 1 0 3 0 1 0 3 0 1 0 4 0 1 0 4 0 1 0 3 0 1 0 3 0 1 0 5 0 1 0 5 
1 1 3 3 1 1 3 3 1 1 4 4 1 1 4 4 1 1 3 3 1 1 3 3 1 1 5 5 1 1 5 5 
0 3 0 3 0 3 0 3 0 4 0 4 0 4 0 4 0 3 0 3 0 3 0 3 0 5 0 5 0 5 0 5 
3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 
0 1 0 2 0 1 0 4 0 1 0 2 0 1 0 4 0 1 0 2 0 1 0 5 0 1 0 2 0 1 0 5 
1 1 2 2 1 1 4 4 1 1 2 2 1 1 4 4 1 1 2 2 1 1 5 5 1 1 2 2 1 1 5 5 
0 2 0 2 0 4 0 4 0 2 0 2 0 4 0 4 0 2 0 2 0 5 0 5 0 2 0 2 0 5 0 5 
2 2 2 2 4 4 4 4 2 2 2 2 4 4 4 4 2 2 2 2 5 5 5 5 2 2 2 2 5 5 5 5 
0 1 0 4 0 1 0 4 0 1 0 4 0 1 0 4 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 5 
1 1 4 4 1 1 4 4 1 1 4 4 1 1 4 4 1 1 5 5 1 1 5 5 1 1 5 5 1 1 5 5 
0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 
0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 5 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 5 
1 1 2 2 1 1 3 3 1 1 2 2 1 1 5 5 1 1 2 2 1 1 3 3 1 1 2 2 1 1 5 5 
0 2 0 2 0 3 0 3 0 2 0 2 0 5 0 5 0 2 0 2 0 3 0 3 0 2 0 2 0 5 0 5 
2 2 2 2 3 3 3 3 2 2 2 2 5 5 5 5 2 2 2 2 3 3 3 3 2 2 2 2 5 5 5 5 
0 1 0 3 0 1 0 3 0 1 0 5 0 1 0 5 0 1 0 3 0 1 0 3 0 1 0 5 0 1 0 5 
1 1 3 3 1 1 3 3 1 1 5 5 1 1 5 5 1 1 3 3 1 1 3 3 1 1 5 5 1 1 5 5 
0 3 0 3 0 3 0 3 0 5 0 5 0 5 0 5 0 3 0 3 0 3 0 3 0 5 0 5 0 5 0 5 
3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 
0 1 0 2 0 1 0 5 0 1 0 2 0 1 0 5 0 1 0 2 0 1 0 5 0 1 0 2 0 1 0 5 
1 1 2 2 1 1 5 5 1 1 2 2 1 1 5 5 1 1 2 2 1 1 5 5 1 1 2 2 1 1 5 5 
0 2 0 2 0 5 0 5 0 2 0 2 0 5 0 5 0 2 0 2 0 5 0 5 0 2 0 2 0 5 0 5 
2 2 2 2 5 5 5 5 2 2 2 2 5 5 5 5 2 2 2 2 5 5 5 5 2 2 2 2 5 5 5 5 
0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 5 
1 1 5 5 1 1 5 5 1 1 5 5 1 1 5 5 1 1 5 5 1 1 5 5 1 1 5 5 1 1 5 5 
0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 
————————————————————————————————
  1   2   1   3   1   2   1   4   1   2   1   3   1   2   1   5 
1 1 2 2 1 1 3 3 1 1 2 2 1 1 4 4 1 1 2 2 1 1 3 3 1 1 2 2 1 1 5 5 
  2   2   3   3   2   2   4   4   2   2   3   3   2   2   5   5 
2 2 2 2 3 3 3 3 2 2 2 2 4 4 4 4 2 2 2 2 3 3 3 3 2 2 2 2 5 5 5 5 
  1   3   1   3   1   4   1   4   1   3   1   3   1   5   1   5 
1 1 3 3 1 1 3 3 1 1 4 4 1 1 4 4 1 1 3 3 1 1 3 3 1 1 5 5 1 1 5 5 
  3   3   3   3   4   4   4   4   3   3   3   3   5   5   5   5 
3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 
  1   2   1   4   1   2   1   4   1   2   1   5   1   2   1   5 
1 1 2 2 1 1 4 4 1 1 2 2 1 1 4 4 1 1 2 2 1 1 5 5 1 1 2 2 1 1 5 5 
  2   2   4   4   2   2   4   4   2   2   5   5   2   2   5   5 
2 2 2 2 4 4 4 4 2 2 2 2 4 4 4 4 2 2 2 2 5 5 5 5 2 2 2 2 5 5 5 5 
  1   4   1   4   1   4   1   4   1   5   1   5   1   5   1   5 
1 1 4 4 1 1 4 4 1 1 4 4 1 1 4 4 1 1 5 5 1 1 5 5 1 1 5 5 1 1 5 5 
  4   4   4   4   4   4   4   4   5   5   5   5   5   5   5   5 
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 
  1   2   1   3   1   2   1   5   1   2   1   3   1   2   1   5 
1 1 2 2 1 1 3 3 1 1 2 2 1 1 5 5 1 1 2 2 1 1 3 3 1 1 2 2 1 1 5 5 
  2   2   3   3   2   2   5   5   2   2   3   3   2   2   5   5 
2 2 2 2 3 3 3 3 2 2 2 2 5 5 5 5 2 2 2 2 3 3 3 3 2 2 2 2 5 5 5 5 
  1   3   1   3   1   5   1   5   1   3   1   3   1   5   1   5 
1 1 3 3 1 1 3 3 1 1 5 5 1 1 5 5 1 1 3 3 1 1 3 3 1 1 5 5 1 1 5 5 
  3   3   3   3   5   5   5   5   3   3   3   3   5   5   5   5 
3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 
  1   2   1   5   1   2   1   5   1   2   1   5   1   2   1   5 
1 1 2 2 1 1 5 5 1 1 2 2 1 1 5 5 1 1 2 2 1 1 5 5 1 1 2 2 1 1 5 5 
  2   2   5   5   2   2   5   5   2   2   5   5   2   2   5   5 
2 2 2 2 5 5 5 5 2 2 2 2 5 5 5 5 2 2 2 2 5 5 5 5 2 2 2 2 5 5 5 5 
  1   5   1   5   1   5   1   5   1   5   1   5   1   5   1   5 
1 1 5 5 1 1 5 5 1 1 5 5 1 1 5 5 1 1 5 5 1 1 5 5 1 1 5 5 1 1 5 5 
  5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5 
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 
————————————————————————————————
              3               4               3               5 
            3 3             4 4             3 3             5 5 
          3   3           4   4           3   3           5   5 
        3 3 3 3         4 4 4 4         3 3 3 3         5 5 5 5 
      3       3       4       4       3       3       5       5 
    3 3     3 3     4 4     4 4     3 3     3 3     5 5     5 5 
  3   3   3   3   4   4   4   4   3   3   3   3   5   5   5   5 
3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 
              4               4               5               5 
            4 4             4 4             5 5             5 5 
          4   4           4   4           5   5           5   5 
        4 4 4 4         4 4 4 4         5 5 5 5         5 5 5 5 
      4       4       4       4       5       5       5       5 
    4 4     4 4     4 4     4 4     5 5     5 5     5 5     5 5 
  4   4   4   4   4   4   4   4   5   5   5   5   5   5   5   5 
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 
              3               5               3               5 
            3 3             5 5             3 3             5 5 
          3   3           5   5           3   3           5   5 
        3 3 3 3         5 5 5 5         3 3 3 3         5 5 5 5 
      3       3       5       5       3       3       5       5 
    3 3     3 3     5 5     5 5     3 3     3 3     5 5     5 5 
  3   3   3   3   5   5   5   5   3   3   3   3   5   5   5   5 
3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 
              5               5               5               5 
            5 5             5 5             5 5             5 5 
          5   5           5   5           5   5           5   5 
        5 5 5 5         5 5 5 5         5 5 5 5         5 5 5 5 
      5       5       5       5       5       5       5       5 
    5 5     5 5     5 5     5 5     5 5     5 5     5 5     5 5 
  5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5 
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 

最上面是(1..32,1..32)的所有SG函数值,第二张去掉了必败状态,第三张为了更容易看清只打印了3以上的值。这样规律就一目了然了,显然这样的三角形是可以递归构建的,Nim和也就更容易计算了。

个人觉得这道题很不错,适合用来组合游戏练手,其中涉及了SG函数的计算和寻找规律,都是组合游戏里重要的思想。

【代码】

找到规律以后,就是水杀了~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值