1. 程式人生 > 資訊 >小鵬汽車 2021 年營收 209.9 億元:全年總交付 98155 輛,造車新勢力全年交付冠軍

小鵬汽車 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)…

我們觀察一下這些狀態,可以找到兩條規律。

  1. 我們假設從小到大排的第k個必敗狀態是(x, y),並且x < y。我們可以發現y = x + k。也就是說必敗狀態兩個數的差值是遞增的
  2. 每一個必敗狀態的差值都各不相同。

反證法:

假設(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$

那麼對於兩個集合AB

\[A \{ \left[ na \right ] \},B=\{ \left [ nb \right ]\}, n \in \mathbb{N^+} \tag{1} \]

有下面兩個結論:

\[A \cap B=\emptyset ,A \cup B =\mathbb{N^+} \tag{2} \]

證明過程:

(1) Betty定理及證明_Michael_GLF的部落格-CSDN部落格_貝蒂瑞利定理

我們不妨假設存在這樣的a, b同時滿足Betty定理與必敗狀態的性質:

\[\left [ an \right ] +n=\left [ bn \right ],\frac{1}{a} +\frac{1}{b} =1 \tag{3} \] \[\left [ an \right ] +n=\left [ an+n \right ]=\left [ \left ( a+1 \right )n \right ]=\left [ bn \right ] \tag{4} \]

帶入可以得到:

\[\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; 
}

(2)博弈論——兩人取子游戲與威佐夫博弈,隱藏在背後的黃金分割 - 知乎 (zhihu.com)