阶梯博弈(Nimm's Game)
如图是Nim游戏的游戏规则

我们设给出的石头堆的石头数量分别为:a[1],a[2],a[3],...;
Nim游戏的结论是,当且仅当 a[1]^a[2]^a[3]^...==0时先手必输(P-position),否则先手必胜(N-position);
好了,对于Nim游戏的概述到此为止,接下来进行对阶梯博弈的分析,题目如下{}

针对本题的游戏规则分析,能够发现,挪动石子的终点,一定是a1的位置;
也就是只有a1不为0,其他均为0时,该局面为必败点(P-position);
因为最终点a1为奇数点,不难发现,这是一个只考虑偶数点的Nim游戏;
因为在游戏中,当偶数点全部异或得到的值为0时,该局面为必败点(P-position);
当上一位玩家操作奇数点的时候,此时可以将该操作重复一遍,同理于Nim游戏;
只有上一位玩家操作偶数点的时候,局面才会被改变,而此时只需要执行操作,保持偶数点全部异或得到的值为0,即可必胜。
最后附上AC代码:
#include<bits/stdc++.h> using namespace std; int a[10000];//用于记录每堆石头个数的数组 int main() { int n;//石头的堆数 int chit=0;//用于计算偶数点全部异或的值的变量 cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=2;i<=n;i=i+2)//计算偶数点全部异或的值 { chit=chit^a[i]; } if(chit==0)cout<<"MYFNB"<<endl;//异或结果为0则后手必胜 else cout<<"WDRNB"<<endl;//异或结果不为0则先手必胜 }

浙公网安备 33010602011771号