小鵬汽車 2021 年營收 209.9 億元:全年總交付 98155 輛,造車新勢力全年交付冠軍
威佐夫博奕
題目
有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者為勝者。現在給出初始的兩堆石子的數目,如果輪到你先取,假設雙方都採取最好的策略,問最後你是勝者還是敗者。
輸入示例
輸入: 1 2
輸出: false
解釋: 無論你怎麼取,都是對方贏
輸入: 2 2
輸出: true
解釋: 直接從兩堆中取2
解題思路
這種情況下是頗為複雜的。我們用(ak,bk)
(ak ≤ bk ,k=0,1,2,…,n)表示兩堆物品的數量並稱其為局勢,如果甲面對(0,0),那麼甲已經輸了,這種局勢我們稱為奇異局勢
前幾個奇異局勢是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)…
我們觀察一下這些狀態,可以找到兩條規律。
- 我們假設從小到大排的第k個必敗狀態是(x, y),並且x < y。我們可以發現y = x + k。也就是說必敗狀態兩個數的差值是遞增的。
- 每一個必敗狀態的差值都各不相同。
反證法:
假設(a, a+k)
, (b, b+k)
都是必敗狀態,並且a < b
。那麼先手在面臨(b, b+k)的時候,只需要在兩堆當中同時取走b-a
個石子,那麼給後手的局面就是(a, a+k)
。對於後手來說,這是一個必敗的局面,這就和(b, b+k)
先手必敗矛盾,所以不存在兩個必敗局面的差值相等
求證
為了寫出通項公式,我們需要引入Betty定理。
設a和b是兩個正無理數,並且$ \dfrac{1}{a}+\dfrac{1}{b}=1$
那麼對於兩個集合A
,B
:
有下面兩個結論:
\[A \cap B=\emptyset ,A \cup B =\mathbb{N^+} \tag{2} \]證明過程:
(1) Betty定理及證明_Michael_GLF的部落格-CSDN部落格_貝蒂瑞利定理
我們不妨假設存在這樣的a, b同時滿足Betty定理與必敗狀態的性質:
帶入可以得到:
\[\frac{1}{a} +\frac{1}{a+1}=1 \tag{5} \]解得:\(a= \frac{1+\sqrt{5}}{2} \approx 1.618\),算出的結果居然是黃金分割比。
由此可以得出奇異局勢的條件:主要看公式(4)
程式碼
public boolean helper(int a,int b){
if(a > b){
int t=a;
a=b;
b=t;
}
int n=b-a;
if((int)(n*(1+Math.sqrt(5))/2)==a) return false;
else return true;
}