当前位置: 首页 > news >正文

【博弈论 Nim问题】洛谷 P2197 【模板】Nim 游戏

View Post

【博弈论 Nim问题】洛谷 P2197 【模板】Nim 游戏

题目

https://www.luogu.com.cn/problem/P2197

题解

经典 Nim 游戏是数学领域的公平组合数学博弈论问题,公平组合游戏具备以下特征:

  1. 完全性(完全信息)
  2. 确定性(无随机因素)
  3. 相同性(双方操作集合相同)
  4. 有穷性(有限步骤内结束)

核心理论

  • 必败态(P-position):当前局面下,轮到操作的一方无论如何走,都会将对手送入必胜态。即“谁走谁输”(假设对方的应对手段不出现失误)。
  • 必胜态(N-position):当前局面下,操作的一方存在一种走法,能将局面变为必败态送给对手。即“谁走谁赢”。

关键结论
对于一个 Nim 局面 \(a_1,a_2,...,a_n\),计算所有数的二进制异或和:$$value_xor=a_1 ^ a_2 ^ ...^a_n$$
\(value_xor==0\),则该局面为 必败态
\(value_xor!=0\),则该局面为 必胜态

彼之失乃吾之得是一种广义的博弈论思想,意思是对方的失误或损失,自然就是我的所得。这个思想用于作为 Nim 游戏的指导思想很恰当,Nim 游戏有时候并不能直接通过选择让自己胜利,但是可以通过让对方陷入不利的局面(有可能直接是必败态)来达成目的,对方失败就是自己胜利。

参考代码

#include<iostream>int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int T, n, m, a;std::cin >> T;while (T --) {std::cin >> n;m = 0;for (int i = 0; i < n; ++ i) {std::cin >> a;m ^= a;// 求异或}std::cout << (m ? "Yes\n" : "No\n");// 0为必败态,否则为必胜态}return 0;
}