【博弈论 Nim问题】洛谷 P2197 【模板】Nim 游戏
题目
https://www.luogu.com.cn/problem/P2197
题解
经典 Nim 游戏是数学领域的公平组合数学博弈论问题,公平组合游戏具备以下特征:
- 完全性(完全信息)
- 确定性(无随机因素)
- 相同性(双方操作集合相同)
- 有穷性(有限步骤内结束)
核心理论
- 必败态(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;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1215964.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!