另一个Nim的游戏变种

时间:2013-11-03 09:50:46

标签: algorithm

给定N二进制序列

示例: 给定一个序列101001意味着

玩家0只能选择一个0元素的位置,并从该位置移除序列,如果他选择第二个元素则为{1;如果他选择第4个元素则为101,如果他选择第5个元素则为1010}

玩家1只能选择一个带有1个元素的位置并从该位置移除序列导致{如果他选择第一个元素则为null,如果他选择第三个元素则为10,如果他选择第6个元素则为10100}

现在玩家0和玩家1轮流减少N序列,在每个回合他们选择一个序列,挑选一个元素并从该位置移除所选序列的结尾,如果玩家不能移动,他输。

假设两位球员都打得最佳,谁会赢?

我尝试用grundy来解决这个问题,但是我无法将序列减少到一个非常大的数字,因为它们都没有相同的移动选项。任何人都可以给我一个提示来解决这个问题吗?

对不起我的坏英语

3 个答案:

答案 0 :(得分:1)

这不是尼姆。这是Blue-red Hackenbush的游戏。甚至还有online hackenbush calculator可以解决这个特定情况(只需将B和R改为0和1),以及算法的简短说明:

  

在颜色变化之前,每个段的值都是+1或-1(取决于它们分别是蓝色还是红色)。   一旦发生颜色变化,每个后续片段(无论颜色如何)都值为前一片段的一半,其中+/-对应于该颜色。   因此,字符串BBRB值为+ 1 + 1-1 / 2 + 1/4 = 7/4。

因此您可以计算每个序列的值。 (假设玩家0被分配到正侧,即“0”评估为+1。)如果所有序列上的这些值的总和为正,则玩家0获胜。如果是负数,则玩家1获胜。如果它是0,那么先移动的人会失败。

答案 1 :(得分:0)

好的,这是我的第二次尝试 如果玩家X在堆栈顶部找到X或列出X -------他将获取一个空列表,它将不会给其他玩家留下任何动作而X将赢 如果玩家X发现Y作为列表的第一个元素,他将失去任何方式,因为他在下一回合选择的是玩家Y将采用第一个元素离开玩家X的空列表而X将丢失 像

YXXXXXXXX

如果玩家X从列表中选择任何X,Y将选择第一个并获胜。

我是否明白了你的观点

答案 2 :(得分:0)

编辑:如下所述,这不是最佳解决方案。

IMO如果只有一个序列,则编号开始序列的玩家将赢得游戏。这是因为在他/她的回合中,他/她将简单地删除导致NULL字符串的第一个元素,因此不会移动其他玩家。

对于多个序列,我找不到比以下更好的最优策略:

现在让我们假设有m个序列以1开头,k个序列以0开头。每个玩家的策略应该是快速完成其他玩家的获胜序列。

因此,播放器0应选择以1开头的m个序列中的第一个零,播放器1将选择从0开始的k个序列中的第一个。

玩家失败,胜利序列首先完成。