歐幾里德的遊戲

2021-09-28 12:26:32 字數 2270 閱讀 8964

題目描述

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

下面是他們用(25,7)兩個數遊戲的過程:

start:25 7

stan:11 7

ollie:4 7

stan:4 3

ollie:1 3

stan:1 0 (stan贏得了遊戲的勝利)

現在,假設他們完美地操作,誰會取得勝利呢?

輸入資料

第一行為測試資料的組數 c 。下面有 c 行,每行為一組資料,包含兩個正整數 m, n 。( m, n 不超過長整型。)

輸出資料

對每組輸入資料輸出一行,如果stan勝利,則輸出「stan wins」;否則輸出「ollie wins」

樣例輸入225

72415

樣例輸出

stan wins

ollie wins

過程分析1

實驗舉例

1)在完美操作下,每個人都想讓自己贏。

2)題目中說的是減去正整數倍,那麼減去的倍數不同,最終贏的人也不同。那麼最終贏的人跟減去的倍數有沒有關係呢?以樣例 25 7為例

狀態

方案1方案2

方案325 7

25  7

25 7

stan

18 7

11 7

4 7ollie

11 7 或 4 7

4 74 3

stan

4 7 或 4 3

3 41 3

ollie

4 3 或 1 3

3 11 0

stan

1 3 或 1 0

0 1ollie獲勝

ollie

1 0 或 stan獲勝

stan獲勝

ollie獲勝

stan

ollie獲勝 或 stan獲勝

stan獲勝

ollie獲勝

標黃色的地方表示選擇方法有大於等於2種

從上表中的結果可以看出,當每次減的倍數大一倍時,贏得步驟會比上一次靠前一步,贏得人會跟上乙個人不一樣。

同時可以深入推測,奇數倍和奇數倍的結果一樣,偶數倍和偶數倍的結果一樣。

總體思路

所以我們可以推出,若到了某一步,這個人減數的方案有大於等於2種,那麼在完美操作下就是這個人贏。因為它減奇數倍若輸,那麼減偶數倍就能贏,反之也成立。也就是說他總能找到一種方,再給對方贏得機會前自己贏。

什麼是贏得機會?

如果較大的數只能減去較小的數的一倍,那麼這個人有且只有一種選擇方案,他不能左右自己贏還是輸。如果較大的數能減去較小的數大於等於2倍,由上面得出,他就可以先決定自己贏還是輸。注意是先決定。

解題關鍵

所以本題的答案是:

1、設m,n為輸入資料且m>n,第乙個滿足條件m-n>n的步驟所對應的人為勝利者

2、m%n==0時的步驟所對應的人為勝利者。

實驗**

flag =

0def

dfs(a, b, s)

:if a > b:

a = a^b

b = a^b

a = a^b

if b % a ==

0or b - a > a:

global flag

flag = s

return

dfs(a, b-a,

(s+1)%

2)if __name__ ==

'__main__'

: total =

int(

input()

)for i in

range

(total)

: a, b =

map(

int,

input()

.split())

dfs(a, b,1)

if flag ==1:

print

("stan wins"

)if flag ==0:

print

("ollie wins"

)

↩︎

歐幾里德的遊戲

這題目好像輾轉相除。每次的兩個數 a b a b 分為兩種情況 一,此時狀態為 a b 1 那最完美的做法是取走 a b 1 b,那麼剩下的兩個數就為 a b b,b 對手唯一的做法就是取走b,剩下 b,a b 這樣就能保證每一次的初狀態都是由自己取,那等到 a b 0 時,就會獲勝。所以到這種初狀...

歐幾里德的遊戲

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

歐幾里德的遊戲

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