sg函式打表
//f:可以取走的石子個數
//sg:0~n的sg函式值
//hash:mex{}
int f[n],sg[n],hash[n];
void getsg(int n)
中未出現的最小的非負整數}}
}
dfs//注意 s陣列要按從小到大排序 sg函式要初始化為-1 對於每個集合只需初始化1遍
//n是集合s的大小 s[i]是定義的特殊取法規則的陣列
int s[110],sg[10010],n;
int sg_dfs(int x)
}int e;
for(i=0;;i++)
if(!vis[i])
return sg[x]=e;
}
分別把每一堆的sg函式計算出來,就可以利用組合遊戲的結論進行nim異或了
第一堆求出sg函式可以發現有規律0,1,2,0,1,2……迴圈
第二堆無規律求出sg2
第三堆sg[a]=a;
第四堆無規律求出sg4
第五堆規律0,1,0,1,0,1……
第六堆及其以後根據巴什博弈,sg[a]=a%(i+1);
#include#includeint f[25],sg2[1005],vis[1005];
int ff[1000],sg4[1005];
void fib()//斐波那契數
void get_ff()//1和偶數
}int get_sg2(int n)//第二堆sg
}return sg2[n];
}int get_sg4(int n)//第四堆sg
}return sg4[n];
}int main()
else if(i==2)
else if(i==3)
else if(i==4)
else if(i==5)
else
}if(f>0)
else
}}
NYOJ 取石子總結
nyoj的取石子有好多道,除了兩道難度為6的,剩下的在這兒簡單總結一下結論。取石子 一 有一堆石子共有n個,a和b輪流取,a先,每次最少取1個,最多取m個,先取完者勝,a,b足夠聰明,問誰先勝?比較簡單的巴什博弈,若n m 1 0,a勝,否則b勝。取石子 七 n個石子擺成一圈,a和b輪流取,每次可以...
NYOJ 取石子(一)
取石子 一 時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他 她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n 1 n 1000000 兩個人輪番取出其中的若干個,每次最多取m個 1...
NYOJ 23 取石子(一)
時間限制 3000 ms 記憶體限制 65535 kb難度 2 描述 一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他 她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n 1 n 1000000 兩個人輪番取出其中的若干個,每次最多取m個 1 m 1000...