poj 2348 歐幾里得博弈

2021-06-29 05:25:16 字數 472 閱讀 9352

題意:給定兩個數,兩個人輪流操作,先把其中乙個數變為0的人贏。這種操作是用把大數變為大數減小數的若干倍的差(不能小於0)。問誰能贏。

思路:(說的很好)誰先搶到關鍵態,誰就能贏。關鍵態就是大數是小數的二倍多。乙個人一旦搶到了關鍵態,就可以直接操控下面一連串的非關鍵態的次序,非關鍵態相當於每個人進行的都是a%b,所以是交替進行a%b和b%a。也就是說這個究竟自己是a%b還是b%a在非關鍵態中,自己是無法決定的。只能由上乙個關鍵態的操控者決定。這樣獲勝的方法就是,乙個人一旦取得關鍵態,就算準次序,讓自己獲得下乙個關鍵態。直至獲勝。

#include #include using namespace std;

long long n,m;

int main(){

while(scanf("%lld %lld",&n,&m) && n && m){

long long i;

int flag = 1;

if(n

Hdu 1525 歐幾里得博弈

兩堆石子每次可以在大堆中取小堆的倍數個石子 第乙個拿光某個堆的玩家贏 假設a b 必勝狀態 a b 0或a b 2 因為當a b 2時 當前玩家可以選擇將狀態轉移至 a b b或a b 同時a b b可轉移至a b 則這兩個狀態中必有乙個為必勝態 includeusing namespace std...

歐幾里得遊戲 博弈論啟蒙

小明和小紅在玩歐幾里得遊戲。他們從兩個自然數開始,第乙個玩家小明,從兩個數的較大數中減去較小數的盡可能大的正整數倍,只要差為非負即可。然後,第二個玩家小紅,對得到的兩個數進行同樣的操作,然後又是小明。就這樣輪流進行遊戲,直至某個玩家將較大數減去較小數的某個倍數之後差為0為止,此時遊戲結束,該玩家就是...

博弈論(階梯博弈)POJ 1704

對階梯博弈的闡述 博弈在一列階梯上進行,每個階梯上放著自然數個點。兩個人進行階梯博弈,每一步則是將乙個集體上的若干個點 1 移到前面去,最後沒有點可以移動的人輸 證明方式 如這就是乙個階梯博弈的初始狀態 2 1 3 2 4 只能把後面的點往前面放 如何來分析這個問題呢 其實階梯博弈經過轉換可以變為n...