P1290 歐幾里德的遊戲

2022-02-17 14:42:50 字數 940 閱讀 5411

原題鏈結  

模擬賽的一道題,我大眼一看是博弈論的題,想都沒想直接跳過(我完全不會博弈論),看了題解之後發現其實並不難;

直接看結論:

記當前狀態為 $d(x,y)$,且 $x>y$,若此時 $x >= 2y$ ,則目前的操作者勝利;

下面是證明:

假定 $x=ky+r$,其中 $r = x \% y$,$k = x / y$ ,根據假設,$k>=2$,此時討論 $d(y,r)$的可能情況:

$1$. 若 $d(y,r)$為必勝狀態(即當時的操作者有必勝策略),則當前操作者( 即 $d(y,r)$狀態下的操作者 )可以轉移到 $d(y+r,r)$(取 $k-1$堆小的,由於 $k>=2$,肯定可以取到 )。

此時,輪到對手操作。因為必須要取正整數堆較小的,所以只能轉移到 $d(y,r)$這個必勝狀態上。那麼,當前的操作者勝利。

若 $d(y,r)$為必敗狀態,其實是類似的,可以直接轉移從 $d(x,y)$至 $d(y,r)$,把必敗狀態留給後手。

這樣,就能把必敗狀態留給對手,將必勝狀態留給自己,那麼自己必勝!

這樣的話,我們在搜尋的時候如果出現 $x >= 2y$ 的情況,則當前的操作者必勝,否則轉移到 $d ( x , x - y )$ ;

#include#include

using

namespace

std;

int dfs(int x,int y,int p) //

p表示當前的操作者,0是先手的人,1是後手的人

intn,m,t;

intmain()

}

P1290 歐幾里德的遊戲

歐幾里德的兩個後代stan和ollie正在玩一種數字遊戲,這個遊戲是他們的祖先歐幾里德發明的。給定兩個正整數m和n,從stan開始,從其中較大的乙個數,減去較小的數的正整數倍,當然,得到的數不能小於0。然後是ollie,對剛才得到的數,和m,n中較小的那個數,再進行同樣的操作 直到乙個人得到了0,他...

P1290 歐幾里德的遊戲

傳送門 肯定是博弈論啦 因為大家都 完美地操作 所以結果是肯定的 那考慮怎樣先手才能控制必勝局面 設大的數是 a,另乙個數是b 如果把數變成 b,a b的局面必勝 那先手肯定走這一步,先手必勝 如果b,a b的局面必輸 那先手就要盡量避免,而且要盡量讓後手變成不得不取成b,a b的必輸局面 考慮怎樣...

洛谷P1290 歐幾里德的遊戲

歐幾里德的兩個後代stan和ollie正在玩一種數字遊戲,這個遊戲是他們的祖先歐幾里德發明的。給定兩個正整數m和n,從stan開始,從其中較大的乙個數,減去較小的數的正整數倍,當然,得到的數不能小於0。然後是ollie,對剛才得到的數,和m,n中較小的那個數,再進行同樣的操作 直到乙個人得到了0,他...