取石子遊戲 HDU2516(斐波那契博弈)

2021-08-19 17:48:22 字數 715 閱讀 3264

題目:problem description

1堆石子有n個,兩人輪流取.先取者第1次可以取任意多個,但不能全部取完.以後每次取的石子數不能超過上次取子數的2倍。取完者勝.先取者負輸出"second win".先取者勝輸出"first win".

input

輸入有多組.每組第1行是2<=n<2^31. n=0退出.

output

先取者負輸出"second win". 先取者勝輸出"first win".

參看sample output.

sample input

213100000

sample output

second winsecond winfirst win

思路:斐波那契博弈裸題,先手必勝的條件為n不是乙個斐波那契數。因此,我們先打表,求出1~2^31次方內的所有斐波那契數求出來,然後一邊迴圈即可,因為易知斐波那契數列增長極快,到50項左右時就已經爆int了,所以進行遍歷時複雜度為常數級。

**實現如下:

1 #include 2

3intn;4

int a[55];5

6void

init() 11}

1213

intmain() 23}

24if(flag) puts("

first win");

25}26return0;

27 }

HDU 2516 取石子遊戲(斐波那契博弈)

本題是傳說中的斐波那契博弈,即 必敗點形成了fibonacci數列,通過找規律就可以看出來的 為何比賽時木有發現 problem description 1堆石子有n個,兩人輪流取.先取者第1次可以取任意多個,但不能全部取完.以後每次取的石子數不能超過上次取子數的2倍。取完者勝.先取者負輸出 sec...

HDU2516 取石子遊戲 斐波那契博弈

1堆石子有n個,兩人輪流取.先取者第1次可以取任意多個,但不能全部取完.以後每次取的石子數不能超過上次取子數的2倍。取完者勝.先取者負輸出 second win 先取者勝輸出 first win 輸入有多組.每組第1行是2 n 2 31.n 0退出.先取者負輸出 second win 先取者勝輸出 ...

HDU 2516 取石子遊戲(斐波那契博弈)

看這道題之前先看看什麼叫斐波那契博弈 斐波那契博弈 需要知道 zeckendorf定理 齊肯多夫定理 任何正整數可以表示為若干個不連續的fibonacci數之和。總結一下就是如果給定的數是斐波那契數列中的乙個,則先手必敗,否則先手必勝,沒有什麼道理的裸題 include include includ...