輸入k及k個整數n1,n2,…,nk,表示有k堆火柴棒,第i堆火柴棒的根數為ni;接著便是你和計算機取火柴棒的對弈遊戲。取的規則如下:每次可以從一堆中取走若干根火柴,也可以一堆全部取走,但不允許跨堆取,也不允許不取。
誰取走最後一根火柴為勝利者。
例如:k=2,n1=n2=2,a代表你,p代表計算機,若決定a先取:
a:(2,2)→(1,2)
p:(1,2)→(1,1)
a:(1,1)→(1,0)
p:(1,0)→ (0,0)
如果決定a後取:
p:(2,2)→(2,0)
a:(2,0)→ 0,0)
又如k=3,n1=1,n2=2,n3=3,a決定後取:
p:(1,2,3)→(0,2,3)
a:(0,2,3)→(0,2,2)
a已將遊戲歸結為(2,2)的情況,不管p如何取a都必勝。
編乙個程式,在給出初始狀態之後,判斷是先取必勝還是先取必敗,如果是先取必勝,請輸出第一次該如何取。如果是先取必敗,則輸出「lose」。
輸入格式:
第一行,乙個正整數k
第二行,k個整數n1,n2,…,nk
輸出格式:
如果是先取必勝,請在第一行輸出兩個整數a,b,表示第一次從第b堆取出a個。第二行為第一次取火柴後的狀態。如果有多種答案,則輸出字典序最小的答案(即b最小的前提下a最小)。
如果是先取必敗,則輸出「lose」。
#include#include#includeusing namespace std;
int k,n[500005],a,b,c,d,ans;
int main()
if(ans==0)
else
else
}for(a=1;a<=k;a++)
}}
題解 P1247 取火柴遊戲
題目鏈結 題目大意 nim 遊戲輸方案 博弈論,nim 遊戲 分析 首先 nim 和定理,nim 遊戲存在先手必勝狀態,當且僅當 a 1 bigoplus a 2 bigoplus a 3 dots bigoplus a n neq 0 分析,首先最終狀態所有物品取完 nim 和顯然為 0 為必敗狀...
洛谷 P1247 取火柴遊戲(nim 遊戲)
簡單說一下 nim遊戲 的博弈原理,先將 a i 轉化成二進位制數,那麼題目變成了每一次可以取走任意 a i 的 任意個 1sum 是所有 a i 的異或值如果 sum 0,說明有偶數個 1,先手拿 x,後手也拿 x,先手必敗如果 sum 0,我們考慮去掉一堆,這 n 1 堆相互異或得到的結果 re...
洛谷P1247 取火柴遊戲 數學題 博弈論
這題就是nim取石子遊戲,但是nim取石子方案並不是單一的,而是有多種方案的,現在讓我們求字典序最小的方案,其實還是簡單的,作為先手,如果是必勝局面,那我們肯定第一步把所有子異或和變為零 這樣對於對方,這就是乙個必敗局面了 2 那我們來考慮怎麼把局面變成必敗局面呢,換句話說,怎麼判斷這一堆取不取呢,...