HDU 2516 取石子遊戲

2022-09-08 01:42:12 字數 820 閱讀 1037

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

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

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

參看sample output.

13 second win

second win

first win

分析先取的人:a  後取的人:b

2個石子時:a肯定輸,b勝。

3個石子時:a取1個或者兩個,還是輸,b勝。

4個石子時:a可以在第一次取1個石子取勝,a勝。

5個石子時:a第一次取1個,然後b完全可以只取1個,讓局面變成3個石子的情形,b勝;a第一次取2個,b勝。

6個石子時:a第一次取1個,然後b再取1個,局面就變成4個石子的情形,a勝,如果b取2個,只剩下3個a可以取完,a勝。

7個石子時:a第一次取2個,然後b再取1個,剩下4個石子的情形,a勝,如果b取2個或者3個或者4個,剩下的a都可以可以一次取完,a勝。

8個石子時:a第一次取1個,b可以取2個,剩下5個石子的局面,b勝;a第一次取2個,b可以去1個,剩下還是5個石子,b勝;a第一次取3個,b可以取完,b勝。

以此類推,可以發現當石子的個數是斐波那契數列中的數時b都可以取勝,否則a可以取勝。

#includeusing

namespace

std;

intmain()

return0;

}

hdu 2516 取石子遊戲

題目 hdu 2516 取石子遊戲 思路 fibonacci nim 列舉前幾項,發現2,3,5是必敗態,不能說明什麼。對於當前的狀態,第一次不能全部取完,其餘的每次取的時候,不能超過前者上一次的兩倍。對於當前狀態n,最多能取的是 ceil n 3 1 和 前一狀態取的的兩倍 兩者間的最小值。然後這...

hdu2516 取石子遊戲

題目大意 桌子上有若干個石子,兩人輪流取。每次必須取走乙個,但不得超過前面的那個人取的數的2倍。拿到最後乙個石子的贏得遊戲。首先,這是一道博弈題,毋庸置疑,找到必敗點,這道題就會有突破 1,2,3是不可否人的必敗點 對於4,先手先取走1個的話,後手就不能取3個,所以還剩下3個,3是必敗點,所以4就是...

hdu2516 取石子遊戲

思路 找規律。先寫個暴力程式,然後發現凡是斐波那契數,都是後手贏,否則先手贏。我也不知道為什麼。暴力程式在 中被注釋。include include include include include include include include include include include inc...