51nod 1072 威佐夫遊戲(威佐夫博弈)

2021-07-30 08:56:08 字數 1904 閱讀 7936

有2堆石子。a b兩個人輪流拿,a先拿。每次可以從一堆中取任意個或從2堆中取相同數量的石子,但不可不取。拿到最後1顆石子的人獲勝。假設a b都非常聰明,拿石子的過程中不會出現失誤。給出2堆石子的數量,問最後誰能贏得比賽。

例如:2堆石子分別為3顆和5顆。那麼不論a怎樣拿,b都有對應的方法拿到最後1顆。

input

第1行:乙個數t,表示後面用作輸入測試的數的數量。(1 <= t <= 10000)

第2 - t + 1行:每行2個數分別是2堆石子的數量,中間用空格分隔。(1 <= n <= 2000000)

output

共t行,如果a獲勝輸出a,如果b獲勝輸出b。

input示例

3 3 5

3 4

1 9output示例

b a

a分析:首先我們根據條件來分析博弈中的奇異局勢

第乙個(0 , 0),先手輸,當遊戲某一方面對( 0 , 0)時,他沒有辦法取了,那麼肯定是先手在上一局取完了,那麼輸。
第二個 ( 1 , 2 ),先手輸,先手只有四種取法,

1)取 1 中的乙個,那麼後手取第二堆中兩個。

2)取 2 中乙個,那麼後手在兩堆中各取乙個。

3)在 2 中取兩個,那麼後手在第一堆中取乙個。

4)兩堆中各取乙個,那麼後手在第二堆中取乙個。

可以看出,不論先手怎麼取,後說總是能贏。所以先手必輸!

第三個 ( 3 , 5 ),先手必輸。首先先手必定不能把任意一堆取完,如果取完了很明顯後手取完另一堆先手必輸,那麼

1)假如看取一堆的情況,假設先手先在第一堆中取。 取 1 個,後手第二堆中取4個,變成(1 ,2)了,上面分析了是先手的必輸局。

2)取 2 個,後手第二堆中取3個,也變成( 1 , 2)局面了。

3)假設先手在第二堆中取,取 1 個,那麼後手在兩堆中各取 2 個,也變成 ( 1 , 2 )局面了。

4)取 2 個 ,那麼後手可以兩堆中都去三個, 變成 ( 0 , 0)局面,上面分析其必輸。

5)取 3 個,後手兩堆各取 1 個 ,變成( 1 , 2)局面了。

6)取 4 個,後手在第一堆中取乙個,變成( 1 , 2)局面了。

可見不論先手怎麼取,其必輸!

第四個(4 , 7),先手必輸。

自己推理可以發現不論第一次先手如何取,那麼後手總是會變成前面分析過的先手的必輸局面。

那麼到底有什麼規律沒有呢,我們繼續往下寫。

第四個 ( 6 ,10 )

第五個 ( 8 ,13)

第六個 ( 9 , 15)

第七個 ( 11 ,18)

會發現他們的差值是遞增的,為 0 , 1 , 2, 3, 4 , 5 , 6, 7…..n

而用數學方法分析發現局面中第乙個值為前面局面中沒有出現過的第乙個值,比如第三個局面,前面出現了 0 1 2,那麼第三個局面的第乙個值為 3 ,比如第五個局面,前面出現了 0 1 2 3 4 5 ,那麼第五個局面第乙個值為6。

再找規律的話我們會發現,第乙個值 = 差值 * 1.618

而1.618 = (sqrt(5)+ 1) / 2 。

大家都知道0.618是**分割率。而威佐夫博弈正好是1.618,這就是博弈的奇妙之處!

在sg函式中,sg(k)表示前面沒有出現過的最小正整數。在威佐夫博弈中,只要兩堆石子數滿足:

(sg(k),sg(k)+k)
那麼後手必勝!否則先手勝!

#include

#include

#include

using

namespace

std;

int main()

return

0;}

51Nod 1072 威佐夫遊戲(威佐夫博弈)

1072 威佐夫遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 有2堆石子。a b兩個人輪流拿,a先拿。每次可以從一堆中取任意個或從2堆中取相同數量的石子,但不可不取。拿到最後1顆石子的人獲勝。假設a b都非常聰明,拿石子的過程中不會出現失誤。給出2堆石子的數量,問...

51Nod 1072 威佐夫遊戲

有2堆石子。a b兩個人輪流拿,a先拿。每次可以從一堆中取任意個或從2堆中取相同數量的石子,但不可不取。拿到最後1顆石子的人獲勝。假設a b都非常聰明,拿石子的過程中不會出現失誤。給出2堆石子的數量,問最後誰能贏得比賽。例如 2堆石子分別為3顆和5顆。那麼不論a怎樣拿,b都有對應的方法拿到最後1顆。...

51nod 1072 威佐夫遊戲

有2堆石子。a b兩個人輪流拿,a先拿。每次可以從一堆中取任意個或從2堆中取相同數量的石子,但不可不取。拿到最後1顆石子的人獲勝。假設a b都非常聰明,拿石子的過程中不會出現失誤。給出2堆石子的數量,問最後誰能贏得比賽。例如 2堆石子分別為3顆和5顆。那麼不論a怎樣拿,b都有對應的方法拿到最後1顆。...