2

给定N个二进制序列

示例:给定一个序列 101001 表示

玩家 0 只能选择具有 0 个元素的位置并从该位置移除序列,结果 {1 如果他选择第 2 个元素或 101 如果他选择第 4 个元素或 1010 如果他选择第 5 个元素}

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

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

假设两个玩家都发挥最佳,谁会赢?

我试图用 grundy 解决这个问题,但我无法将序列减少到一个 grundy 数字,因为这两个玩家没有相同的移动选项。谁能给我一个提示来解决这个问题?

顺便说一句,对不起我的英语不好

4

3 回答 3

1

不是尼姆。这是蓝红哈肯布什的游戏。甚至还有一个在线 hackenbush 计算器可以解决这种特定情况(只需将 B 和 R 更改为 0 和 1),以及对算法的简短说明:

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

所以你可以计算每个序列的值。(假设玩家 0 被分配到正面,即“0”的计算结果为 +1。)如果所有序列中这些值的总和为正,则玩家 0 获胜。如果是负数,则玩家 1 获胜。如果它是0,那么谁先走,谁就输了。

于 2013-11-03T12:16:15.743 回答
0

好的,这是我的第二次尝试,如果玩家 X 发现 X 在堆栈顶部或列表 X------- 他将把它拿走,结果是一个空列表,它不会给其他玩家留下任何动作并且 X 将获胜如果玩家 X 发现 Y 是列表的第一个元素,他会以任何方式失败,因为无论他在下一回合选择什么,玩家 Y 都会拿走第一个元素,让玩家 X 的列表为空,X 会输

YXXXXXXXX

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

我明白你的意思了吗

于 2013-11-03T10:10:11.483 回答
0

编辑:正如所指出的,以下不是最佳解决方案。

IMO 如果只有一个序列,则其号码开始序列的玩家将赢得比赛。这是因为轮到他/她时,他/她将简单地删除第一个元素,从而导致 NULL 字符串,因此其他玩家不会移动。

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

现在让我们假设有 m 个从 1 开始的序列和 k 个从 0 开始的序列。每个玩家的策略应该是快速完成另一个玩家的获胜序列。

因此,玩家 0 应选择从 1 开始的 m 个序列中的第一个零,而玩家 1 应选择从 0 开始的 k 个序列中的第一个。

获胜顺序首先完成的玩家输掉。

于 2013-11-03T11:14:34.140 回答