「AcWing学习记录」博弈论
AcWing 891. Nim游戏
定理: Nim博弈先手必胜,当且仅当
问题1:当没有石子可拿的时候异或值为0,即
问题2:当面临异或值不为0的局面时,一定可以从某堆石子中拿走一部分使剩下的石子异或值为0。
设
假设x的二进制表示中最高一位1在第k位,那么
又因为
所以当从第i堆石子中拿走
问题3:当面临异或值为0的局面时,如果拿走一部分石子,一定会使剩下的石子异或值不为0。
利用反证法证明,假设当
设
将上下等式左右两边异或起来,有
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
int res = 0;
scanf("%d", &n);
while(n--)
{
int x;
scanf("%d", &x);
res ^= x;
}
if(res) puts("Yes");
else puts("No");
return 0;
}
AcWing 892. 台阶-Nim游戏
AcWing 893. 集合-Nim游戏
AcWing 894. 拆分-Nim游戏
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话