ACM訓練日記 3月7日

2021-08-16 08:33:26 字數 2207 閱讀 1618

這兩天主要在看關於博弈論的內容,總的來說有的巴什博奕,威左夫博弈,尼姆博弈,斐波那契博弈等。最後還有最經典的組合博弈。可能是我比較笨,關於尼姆博弈及其sg函式還沒完全看明白。就先整理一下看懂的吧。

1,巴什博奕

來自:只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。

顯然,如果n=m+1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則:如果

n=(m+1)r+s,(r為任意自然數,s≤m),那麼先取者要拿走s個物品,如果後取者拿走k(≤m)個,那麼先取者再拿走m+1-k個,結果剩下(m+1)(r-1)個,以後保持這樣的取法,那麼先取者肯定獲勝。總之,要保持給對手留下(m+1)的倍數,就能最後獲勝。那麼這個時候只要n%(m+1)!=0,先取者一定獲勝。

這個遊戲還可以有一種變相的玩法:兩個人輪流報數,每次至少報乙個,最多報十個,誰能報到100者勝。

分析此類問題主要放法是:p/n分析:

p點:即必敗點,某玩家位於此點,只要對方無失誤,則必敗;

n點:即必勝點,某玩家位於此點,只要自己無失誤,則必勝。

三個定理:

一、所有終結點都是必敗點p(上遊戲中,輪到誰拿牌,還剩0張牌的時候,此人就輸了,因為無牌可取);

二、所有一步能走到必敗點p的就是n點;

三、通過一步操作只能到n點的就是p點;

這個是比較好理解的,包括m+1倍的設定恰巧保證的勝利。

2,斐波那契博弈

首先,說明下任何乙個正整數都可以被分解為若干斐波那契數和

來自:題意:

一堆石子有n個,兩人輪流取,先取者第1次可以取任意多個,但不能全部取完,以後每次取的石子數不能超過上次取子數的

2倍。取完者勝.先取者負輸出"second win".先取者勝輸出"first win"。

比如,我們要分解83,注意到83被夾在55和89之間,於是把83可以寫成83=55+28;然後再想辦法分解28,28被夾在21和

34之間,於是28=21+7;依此類推 7=5+2,故83=55+21+5+2。

如果 n 是 fibonacci 數,比如 n = 89。89前面的兩個fibonacci 數是34和55。如果先手第一次取的石子不小於34

顆,那麼一定後手贏,因為 89 - 34 = 55 = 34 + 21 < 2*34,注意55是fibonacci數。此時後手只要將剩下的全部

取光即可,此時先手必敗。故只需要考慮先手第一次取得石子數 < 34 即可,於是剩下的石子數 x 介於 55 到 89 之

間,它一定不是乙個 fibonacci 數。於是我們把 x 分解成 fibonacci 數:x = 55 + f[i] + … + f[j],其中

55 > f[i] > … > f[j],如果 f[j] ≤ 先手一開始所取石子數 y 的兩倍,那麼對後手就是面臨 x 局面的先手,所以

根據之前的分析,後手只要先取 f[j] 個即可,以後再按之前的分析就可保證必勝。

下證:f[j] ≤ 2y

反證法:假設f[j]>2y,則 y < f[j]/2 = (f[j-1] + f[j-2])/2 < f[j-1]。而最初的石子數是個斐波那契數,即 

n = f[k] = x + y < f[k-1] + f[i] + … + f[j] + f[j-1] ≤ f[k-1]+f[i]+f[i-1] ≤ f[k-1]+f[k-2] ≤ 

f[k] (注意第乙個不等號是嚴格的),矛盾!f[j] ≤ 2y得證。

像83=55+21+5+2,先手取走2,後手取得數就不可能把5取走,導致先手再取走剩下的5後還保證後手繼續無法取走21,依次耗下去就可以先手必勝。

3威左夫博弈

問題:首先有兩堆石子,博弈雙方每次可以取一堆石子中的任意個,不能不取,或者取兩堆石子中的相同個。先取完者贏。

beatty定理:對於任意滿足1/a+1/b=1, 的正無理數a,b,都有結論:[a],[2a],[3a],[4a]......[b],[2b],[3b],[4b]......都是不同的數,而且覆蓋正整數集。

推薦:我就不搬大佬的部落格了吧,包括定理證明和推導都很詳細,反正就是,綜上所述,取a=(sqrt(5)+1)/2,b=(sqrt(5)+3)/2,那麼([ak],b[k])(k=1,2,3,4......)就是所有的負態。

int main()

return 0;}

就先整理到這吧,明天結束尼姆博弈及其sg函式的部分。然後看部落格尤其是組合博弈。

必須繼續加快速度!!!

ACM訓練日記 7月17日

先無關的吐槽一下 做夢都想不到我掛的第一科居然是離散,偏偏是有把握的科掛的我是真的很懵,如果我真的沒學明白那到所謂了,但我為什麼覺得期末卷子感覺挺簡單的,為什麼就不能重新核對卷子分數?我承認離散學的一般,但是是否真的掛科,我還是抱有乙個巨大的質疑。抱歉不該把無關的心情扯進來,今天還繼續學習了一些快速...

ACM訓練日記 7月22日

感覺這個周一直在做題看題,有些題目確實有些難度,有的時候連看懂題解都會成為一種奢侈,就像牛客多校第二場的題目,g題的那個思維,對字首和與字首價值和的利用真的巧妙,雖然這個題是感覺能出,可那個 的細節處理對我確實是一種挑戰,另外,好不容易看懂了j題,思路大致與我當時樹形dp的定義法一樣,可還是那個狀態...

ACM訓練日記 7月23日

今天做了第一場杭電的多校練習賽,還是有許多欠缺,在1007題上還有許多疑問,官方給的題解確實沒學過阿貝爾變換,迷你改天還要仔細學習一下,但是在直播的時候又講了另一種方法完完全全和我們推得規律一樣,方法也一樣,唯一乙個不同就是它對長度在做了乙個小優化,可疑問的是我在此按照up主講的優化完還是超時,到現...