時間限制: 1 sec 記憶體限制: 30 mb
提交: 250 解決: 47
[提交][狀態][討論版]有n個石子,有兩人輪流從中取石子,最少a個最多b個,誰沒得取(即當輪到他取是已經沒有石子可以取了,也就是說此時石子數量小於a)誰贏,現在,llm先取,問你llm能贏嗎
每個測試樣例少於100000組測試資料
每組測試樣例第一行三個整數n,a,b
1<=a<=b,n<=100000000
如果llm能贏,輸出yes,否則輸出no
1 1 12 1 2
no河南省多校臉萌第六場yes
題解(非原創):
巴什博弈:只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。
顯然,如果n=m+1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則:如果
n=(m+1)r+s,(r為任意自然數,s≤m),那麼先取者要拿走s個物品,如果後取者拿走k(≤m)個,那麼先取者再拿走m+1-k個,結果剩下(m+1)(r-1)個,以後保持這樣的取法,那麼先取者肯定獲勝。總之,要保持給對手留下(m+1)的倍數,就能最後獲勝。那麼這個時候只要n%(m+1)!=0,先取者一定獲勝。
當我沒得取時輸,也就是說當剩下大於等於a個石子少於2*a個石子的時候我必然輸,其他必敗態就是這個數量再加上(a+b)*k k為常數
舉例而言:
6 2 2
雙方取一輪,剩下2個,該我取那自然我就輸了
如果是8 2 2
我可以先取二個把問題轉化為:6 2 2的情況下對手先取,那自然他輸
這麼說吧:我們可以把給出的n分個類:
n%(a+b)
n%(a+b)<2*a
n%(a+b)>=2*a
對於第二種情況,我是必敗的這個很好推
對於第一種情況,我可以通過取乙個b變成:對面先取,狀態是n%(a+b)<2*a
對於第三種情況,我可以取個大於等於a的數量變成:對面先取,狀態是n%(a+b)==a
附ac**:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7view codeusing
namespace
std;89
intmain()
16return0;
17 }
當時做的時候,總想著判斷條件和b也有關係,最後看了題解才知道只和a有關。
nyoj 2359 巴什博弈?(博弈 找規律)
題目描述 有n個石子,有兩人輪流從中取石子,最少a個最多b個,誰沒得取 即當輪到他取是已經沒有石子可以取了,也就是說此時石子數量小於a 誰贏,現在,llm先取,問你llm能贏嗎輸入 每個測試樣例少於100000組測試資料 每組測試樣例第一行三個整數n,a,b 1 a b,n 100000000輸出 ...
NYOJ 小博弈(巴什博奕)
題目描述 小博弈呀小博弈,從前有個小博弈,特別水呀特別水,總是特別特別水 每當唱起這首歌,yougth就想給大家來一道小博弈。now,yougth和hrdv這對 博弈搭檔又要玩遊戲了,有n個石子,每次最多可以取a個,最少可以取b個,當剩下少於b的話就要一次性取完,yougth先取,誰先面對石子為0的...
博弈 巴什博弈
只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。顯然,如果n m 1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則 如果n m 1 r s,r為任意自然數,s m 那麼先取...