題意:求解nim博弈先手必勝的方法數。
解題思路:在必勝態時,先手要做的就是拿走某堆石頭中的m個,使得xor變成0。將必敗態轉移給後手,題目就是就是問有多種使得xor變成0的方法數?
=> (ki - m) ^ (xor ki) 後面的xor ^ ki代表所有的異或值以後上ki,即等價於除了ki這堆,其他堆的異或和。
=> ki - m = xor ^ ki
=>m = ki - xor^ki
要是m > 0即是 ki > xor^ki,所原來的問題就轉換成了求ki > xor^ki的堆數。
#include
int a[1010];
int main()
int cnt = 0;
for(int i = 1; i <= n; i++)
}printf("%d\n", cnt);
}return
0;}
POJ 2975 Nim題解 簡單的博弈論
題意 給定一種nim狀態 相當於含n堆石頭 求能有幾種方法能通過調整某一堆石頭的狀態 只准取出 使新的nim狀態為必敗態。或者說求出所給的nim遊戲狀態有多少種方法能夠贏 分析 在證明nim遊戲的sg函式的 根據這個判斷被判為n position的局面一定可以移動到某個p position 命題時,...
nim遊戲的必勝策略
假設有n堆石子,每堆石子的個數分別如下 a1,a2,a3,an 定義nim sum為a1 a2 a3.an 可以證明 1.若a1 a2 a3.an 0 則經過一次合法的移動之後必定可變成 a1 a2.an 0 此時留下的局面為必勝。2.若a1 a2 a3.an 0 則經過一次合法的移動,局面必定成為...
博弈專題 nim博弈 必勝第一步方案數
題目大意 二人小遊戲 桌子上有m堆撲克牌 每堆牌的數量分別為ni i 1 m 兩人輪流進行 每走一步可以任意選擇一堆並取走其中的任意張牌 桌子上的撲克全部取光,則遊戲結束 最後一次取牌的人為勝者。現在我們不想研究到底先手為勝還是為負,我只想問大家 先手的人如果想贏,第一步有幾種選擇呢?思路 直接看 ...