get_sg();if(sg[n]==0)//先手必败else//先手必胜//如果有多堆,则//num=sg[n1]^sg[n2]^sg[n3]^...^sg[nx];//if(num==0) 则先手必败//else 先手必胜... } //注意 S数组要按从小到大排序 SG函数要初始化为-1 对于每个集合只需初始化1遍//n是集合s的大小 S[i]是定义的特殊取法规则...
//f[N]:可改变当前状态的方式,N为方式的种类,f[N]要在getSG之前先预处理 //SG[]:0~n的SG函数值 //S[]:为x后继状态的集合 int f[N],SG[maxn],S[maxn]; void getSG(int n) { int i,j; memset(SG,0,sizeof(SG)); //因为SG[0]始终等于0,所以i从1开始 for(i = 1; i <= n; ...