HDU 1527 取石子遊戲

2021-07-30 22:31:23 字數 959 閱讀 6299

problem description

有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者為勝者。現在給出初始的兩堆石子的數目,如果輪到你先取,假設雙方都採取最好的策略,問最後你是勝者還是敗者。

input

輸入包含若干行,表示若干種石子的初始情況,其中每一行包含兩個非負整數a和b,表示兩堆石子的數目,a和b都不大於1,000,000,000。

output

輸出對應也有若干行,每行包含乙個數字1或0,如果最後你是勝者,則為1,反之,則為0。

sample input

2 1

8 4

4 7sample output

0 1

0分析:分析:這道題是威佐夫博弈

可將兩堆物品記做(a,b) 只考慮a<=b;

1.(0,0)p點

2.(0,*)n點(一步到1)

3.(1,1)n點

4.(1,2)p點(只能到2,3)

5.(1,*)n點(一步到4)

6.(2,*)n點

7.(3,3)n點(一步到1)

8.(3,4)n點(一步到4)

9.(3,5)p點(到不了p點)

10.(3,*)n點(一步到9)

11.(5,*)n點

. .

. 所以,p點在 i=b-a(i=0,1,2,3…) 的位置

1.ai=[i*(1+√5)/2](方括表示下取整),2.bi=ai+i

如果開始時a,b就滿足上述關係則先手敗,否則先手勝。

#include

using

namespace

std;

int main()

HDU 1527 取石子遊戲

problem description 有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子 二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者為勝者。現在給出初始的兩堆石子的數目,如果輪到你先取,假設雙方都採取...

HDU 1527 取石子遊戲

time limit 1000ms memory limit 32768kb 64bit io format i64d i64u description 有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子 二是可以在兩堆...

hdu 1527 取石子遊戲

problem description 有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子 二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者為勝者。現在給出初始的兩堆石子的數目,如果輪到你先取,假設雙方都採取...