#include<bits/stdc++.h>
using namespace std;
const int N=110;
int f[N];
int n;
int sg(int x)
{
if(f[x]!=-1) return f[x];
unordered_set<int> S;
for(int i=0;i<x;i++)
{
for(int j=0;j<=i;j++)
{
S.insert(sg(i)^sg(j));
}
}
for(int i=0;;i++)
{
if(!S.count(i))
{
return f[x]=i;
}
}
}
int main()
{
memset(f,-1,sizeof f);
cin>>n;
int res=0;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
res^=sg(x);
}
if(res) puts("Yes");
else puts("No");
return 0;
}
代码非常简单,主要是怎么转换
一堆石子变成两堆石子,因为一堆石子的石子个数在减小,所以是可以结束的游戏
转换成有向图,sg(b1,b2)=sg(b1)^sg(b2)文章来源:https://www.toymoban.com/news/detail-810335.html
有点难以理解文章来源地址https://www.toymoban.com/news/detail-810335.html
到了这里,关于894. 拆分-Nim游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!