Bash博弈:
题意:
有一堆石子共有N个。A B两个人轮流拿,A先拿。每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N和K,问最后谁能赢得比赛。
思路:
当N为(k+1)个时,后者必胜。无论前者怎么取,后者都能取走最后的石子
所以当N%(k+1)==0 时,不论如何最后都会出现k+1的局面,所以当N%(k+1)==0 时,后者必胜
Nim博弈:
题意:
有N堆石子。A B两个人轮流拿,A先拿。每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N及每堆石子的数量,问最后谁能赢得比赛。
思路:
(瞎写的)
当(0,0,0)时,为必败局
当(0,0,1)时,为必胜局 ,当(0,0,2)时,为必胜局 ,当(0,0,n)时,为必胜局
当(0,1,1)时,为必败局 ,当(0,1,2)时,为必胜局 , 当(0,1,n)时,为必胜局
当(0,2,2)时,为必败局 , 当(0,2,3)时,为必胜局 ,
当(1,1,1)时,为必胜局
根据上面推出。。。。(。。。)
所以,将所有的石子进行异或操作,当异或值为 0时 ,后者必胜 ,否者,前者必胜。
威佐夫博弈:
题意:
有2堆石子。A B两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的数量,问最后谁能赢得比赛。
思路:
x,y的最小值 = fabs(x-y)*(sqrt(5)+1)/2.0
后手胜,否则,先手胜
题目链接(以后补.....):
51node Bash游戏
51node Nim游戏
51node 威佐夫游戏