博弈 小花梨的取石子遊戲

2021-09-22 22:56:18 字數 2370 閱讀 2507

時間限制:1000ms 空間限制:512mb

description

小花梨有

?堆石子,第

?堆石子數量為??,

?堆石子順時針編號為

1 − ?

(如圖)。

遊戲將進行?

輪,每輪遊戲單獨進行,互不干擾,每輪初始時第?

堆石子數目為??

第?

輪從編號為

?的那堆石子為起點,順時針來取石子。兩人輪流取石子,不可不取,最少取

乙個石子,最多把當前這一堆取完,只有取完一堆後才走到下一堆石子。走完一圈後石子都

被取完,不能取石子的人就失敗。假設兩人以最優策略進行取石子操作,請分別輸出

?輪遊

戲是先手勝還是後手勝。

input

第一行為正整數

?,表示石子的堆數

(1 ≤ ? ≤ 100000)

第二行輸入

?個正整數表示每一堆的石子數目

??(1 ≤ ?? ≤ 10

9 )

output輸出?

行,第?

行表示第

?輪遊戲的結果。如果先手勝則輸出

"?????"

,後手勝輸出

"??????"。

example

sample input sample output 3

2 1 3

first

second

first 2

2 2

first

first

note樣例1

: 遊戲進行3輪

第1輪遊戲石子堆下標的順序為

1 2 3

,此時石子數目按順序為

2 1 3

,先手勝 第

2輪遊戲石子堆下標的順序為

2 3 1

,此時石子數目按順序為

1 3 2

,後手勝 第

3輪遊戲石子堆下標的順序為

3 1 2

,此時石子數目按順序為

3 2 1

,先手勝

這道題不是尼姆博弈論(nimm game),因為在進行運算的時候順序是給定的

舉個例子:現在有兩個資料,分別為3和4,如果想贏,那麼只要滿足先取就行了,因為對於3,一開始取2,那麼第二個人只能取1,這個時候第乙個人再把第二堆的4給取走,這樣就贏了,也就是說只要滿足所有的數字都是大於1的,就一定是先取者肯定勝利。

那現在資料變成三個的話,又會怎麼樣呢?

1:資料分別為:3 1 4 ,因為有乙個1存在,那麼如果說現在第乙個人在取的時候想贏,按照上面的方法,他取走3中的兩個陣列,現在資料變成 1 1 4,這樣第二個人只能取  1,現在資料變成 1 4,那麼緊接著第乙個人也是只能取1,現在資料變成4.......最後可以看出,肯定是第二個人贏。

那也就是說,在這種情況下,兩個人的勝負情況發生了改變

不要被我誤導~~~這句話其實是不正確的,因為我們知道在進行博弈的過程中,我們每個人都是最聰明的那乙個,既然第乙個人在剛開始從3中拿兩個資料的時候就已經輸了,那為什麼不在這一部分進行乙個改變呢?直接把3給拿走完不就好了嗎,這樣到最後,勝利的還是1.

綜上所述,只要後面出現乙個比一大的數字,那麼不管它後面的數字情況如何,第乙個人都能勝利。

進行乙個引申:

2:  1 1 2

這種情況下,前面呢有兩個1,2%2=0,第乙個人先取能夠保證勝利。

剛才後面有一的時候,我們可以通過前面的數字進行調節,使得在當前情況下還能夠勝利,那麼現在我們只需計算從頭開始出現多少個1就能知道第乙個人先取還是後取才能保證勝利了

#include#include#includeusing namespace std;

const int maxn=200005;

int a[maxn];

int number[maxn];

int main()}}

for(int i=0 ;i

return 0;

}

小花梨的取石子遊戲 博弈

小花梨有?堆石子,第?堆石子數量為?堆石子順時針編號為1 如圖 遊戲將進行?輪,每輪遊戲單獨進行,互不干擾,每輪初始時第?堆石子數目為?第?輪從編號為?的那堆石子為起點,順時針來取石子。兩人輪流取石子,不可不取,最少取 乙個石子,最多把當前這一堆取完,只有取完一堆後才走到下一堆石子。走完一圈後石子都...

問題 D 小花梨的取石子遊戲

本人是一名小弱雞,如果有錯誤,請各位大佬指出。第一次寫,希望大家能夠提出不足之處。小花梨有n堆石子,第i堆石子數量為ai,n堆石子順時針編號為1 n 如圖 遊戲將進行n輪,每輪遊戲單獨進行,互不干擾,每輪初始時第i堆石子數目為ai。第i輪從編號為i的那堆石子為起點,順時針來取石子。兩人輪流取石子,不...

ZOJ 問題 D 小花梨的取石子遊戲

題目描述 小花梨有n堆石子,第i堆石子數量為ai,n堆石子順時針編號為1 n 如圖 遊戲將進行n輪,每輪遊戲單獨進行,互不干擾,每輪初始時第i堆石子數目為ai。第i輪從編號為i的那堆石子為起點,順時針來取石子。兩人輪流取石子,不可不取,最少取乙個石子,最多把當前這一堆取完,只有取完一堆後才走到下一堆...