簡單說一下 nim遊戲 的博弈原理,先將 a[i] 轉化成二進位制數,那麼題目變成了每一次可以取走任意 a[i] 的 任意個 1sum 是所有 a[i] 的異或值如果 sum=0,說明有偶數個 1,先手拿 x,後手也拿 x,先手必敗如果 sum!=0,我們考慮去掉一堆,這 n-1 堆相互異或得到的結果 res,剩下的那一堆為 x,如果 x>res,那麼我們考慮將拿掉 x-res,那麼剩下的那一堆與其餘的 n-1 堆形成異或為 0 的必敗局面,可以證明一定存在 x 使得 sum!=0 時成立
const int n=5e5+5;
int n,m;
int i,j,k;
ll a[n];
void print(int pos,ll x)
}int main()
}} }
}
P1247 取火柴遊戲
輸入k及k個整數n1,n2,nk,表示有k堆火柴棒,第i堆火柴棒的根數為ni 接著便是你和計算機取火柴棒的對弈遊戲。取的規則如下 每次可以從一堆中取走若干根火柴,也可以一堆全部取走,但不允許跨堆取,也不允許不取。誰取走最後一根火柴為勝利者。例如 k 2,n1 n2 2,a代表你,p代表計算機,若決定...
題解 P1247 取火柴遊戲
題目鏈結 題目大意 nim 遊戲輸方案 博弈論,nim 遊戲 分析 首先 nim 和定理,nim 遊戲存在先手必勝狀態,當且僅當 a 1 bigoplus a 2 bigoplus a 3 dots bigoplus a n neq 0 分析,首先最終狀態所有物品取完 nim 和顯然為 0 為必敗狀...
洛谷 1247 取火柴遊戲
題目描述 輸入k及k個整數n1,n2,nk,表示有k堆火柴棒,第i堆火柴棒的根數為ni 接著便是你和計算機取火柴棒的對弈遊戲。取的規則如下 每次可以從一堆中取走若干根火柴,也可以一堆全部取走,但不允許跨堆取,也不允許不取。誰取走最後一根火柴為勝利者。例如 k 2,n1 n2 2,a代表你,p代表計算...