Roy October之取石子

2021-08-13 23:58:33 字數 1201 閱讀 7414

題目背景

roy和october兩人在玩乙個取石子的遊戲。

題目描述

遊戲規則是這樣的:共有n個石子,兩人每次都只能取p^k個(p為質數,k為自然數,且p^k小於等於當前剩餘石子數),誰取走最後乙個石子,誰就贏了。

現在october先取,問她有沒有必勝策略。

若她有必勝策略,輸出一行」october wins!」;否則輸出一行」roy wins!」。

輸入輸出格式

輸入格式:

第一行乙個正整數t,表示測試點組數。

第2行~第(t+1)行,一行乙個正整數n,表示石子個數。

輸出格式:

t行,每行分別為」october wins!」或」roy wins!」。

輸入輸出樣例

輸入樣例#1:

3 4

9 14

輸出樣例#1:

october wins!

october wins!

october wins!

說明對於30%的資料,1<=n<=30;

對於60%的資料,1<=n<=1,000,000;

對於100%的資料,1<=n<=50,000,000,1<=t<=100,000。

分析:

被xjh拉去做比賽。然後就去**。這道題顯然,1,2,3,4,5是先手贏狀態,6無論怎麼選都不行,就是乙個後手狀態,以此類推,我們發現,如果先手能夠一步拿到任何乙個後手狀態,就可以贏,然後我們發現每乙個後手狀態都是6k。

證明:

假設現在數為6k,我們已經證明出6a(a<k)為後手狀態,那麼要想拿出後手狀態,顯然要拿走6(k-a),而6(k-a)一定不是乙個質數的乘方,分解質因數會有乙個2和乙個3,顯然不可能。而且,假設先手拿走了數表示為6x+y(0<y<6,不為0,已證明),後手可以通過拿走6-y使得現在的數成為6的倍數,且小於原數。

**:

var

n,t,i:longint;

begin

readln(t);

for i:=1

to t do

begin

readln(n);

if n mod

6=0then writeln('roy wins!')

else writeln('october wins!');

end;

end.

取石子遊戲

如下 include include intmain k b a temp floor k 1.0 sqrt 5 2.0 if temp a printf 0 n else printf 1 n return 0 一 巴什博奕 bash game 只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每...

取石子問題

xiao tang和xiao jiang非常喜歡玩一種有趣的小遊戲 有n個石子,兩人輪流從中取出1個,3個或4個石子,當石子被取空時,遊戲結束。最後乙個取石子的人獲勝,第一次總是xiao tang取.當然,他們倆都足夠聰明,總會採取最優的策略。input 每行會有乙個正整數n n 100000 代表...

取石子問題

有一種很有意思的遊戲,就是有物體若干堆,可以是火柴棍或是圍棋子等等均可。兩個人輪流從堆中取物體若干,規定最後取光物體者取勝。這是我國民間很古老的乙個遊戲,別看這遊戲極其簡單,卻蘊含著深刻的數學原理。下面我們來分析一下要如何才能夠取勝。一 巴什博奕 bash game 只有一堆n個物品,兩個人輪流從這...