令非负整数集为全集,集合G(x)表示集合g(x)的补集。 定义函数f(n):f(n)=min{G(n)},即f(n)等于集合G(n)中的最小数。 设局面S=(a1, a2, …, an),#S=f(a1)+f(a2)+…+f(an),采用二进制数的加法。 *若#S≠0,则先行者有必胜策略;若#S=0,则后行者有必胜策略。
我们规定,对于每堆石子\(G_i\),对应的\(SG(G_i)=SG(x)\),其中\(x\)是该堆石子最初的数量。 结合这棵树: 从\(SG\)函数可以看出,当先手进行决策后,对应的的\(SG\)函数值可以为\([0,SG(x)-1]\),这恰好就像我们最初讨论的普通的Nim问题中取石子的规则! 在这里,我们将\(SG\)函数值看成是普...
计算sg函数,发现只有n=1,3,7,15,…2^n-1时,后手胜 #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<functional> #include<iostream> #include<cmath> #include<cctype> #include<ctime> #include<iomanip> using namespace std; #define #define #define #define #def...
mob604757006a49 暴力的求SG函数会超时,正解是先处理出10^6以内的SG值,对于更大的,开根号之后计算出。 小数据观察可以发现sg函数值成段出现,而且增长速度很快,因此可以计算出来每一段的范围,只需打表即可。 Nim游戏: Nim和:L.Bouton给出了一个定理,状态(X1, X2, ..., Xn)为必败态当且仅当X1 xor X2...
SG函数 在有向图游戏中,对于每个节点 x ,SG(x)=mex({ SG(y1) , SG(y2) ...}) ,其中y为x的后继节点。特别的,整个有向图游戏 G 的 SG 函数值被定义为有向图起点 s 的SG函数,即 SG(G)=SG(s) .有向图游戏的和 设 G1,G2,G3 ... 为 m 个有向图游戏,定义有向图游戏 G ,它的...
SG 函数!这个 f[u]f[u] 还有另外一层意义:在图上的 uu 点有一枚棋子,先后手轮流操作,每次将棋子沿一条出边移动出去,不能移动的输,则 f[u]f[u] 为11 代表该点先手必败,为 00 代表该点先手必胜。 于是对于三维(甚至更高维)的情况做法也清楚了:多维就相当于多个游戏的叠加,于是使用 SG 函数解决,...
对于每个质数因子,分别计算其SG函数值, 再异或运算。 #include"stdafx.h"#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<queue>#include#include<vector>#include<set>#defineendl'\n'#defineIOSios::sync_with_stdio(false),cin.tie(nullptr)usingnamespacestd...
^g(Gn)。也就是说,游戏的和的SG函数值是它的所有子游戏的SG函数值的异或。 再考虑在本文一开头的一句话:任何一个ICG都可以抽象成一个有向图游戏。所以“SG函数”和“游戏的和”的概念就不是局限于有向图游戏。我们给每个ICG的每个position定义SG值,也可以定义n个ICG的和。所以说当我们面对由n个游戏组合成...
博弈论 + SG函数 + 分段打表 暴力的求SG函数会超时,正解是先处理出10^5以内的SG值,可以发现sg函数值成段出现. 根据sg函数值成段出现的特点,构造函数sg[lower_bound(a, a+6, i)-a]。 根据10^5以内的SG值,使用该函数,容易计算全部SG值(<=777777777777) ...
刚好FWT和SG函数都刚学,这道题也挺模板的,就拉来做做。 手动打个SG函数表发现\(sg[2^k+n]=n+1\),然后博弈论就被干掉了,剩下的问题变成,有\(m\)个数可以选,选择\(v\)个数使得异或和为\(0\)。 这道题题意有锅吧,正确表述应该是大小为\(V\)的序列,而不是集合,因为方案数跟选取顺序有关。