資訊學奧賽一本通 1218:取石子游戲(NIM)
【題目描述】
有兩堆石子,兩個人輪流去取。每次取的時候,只能從較多的那堆石子裡取,並且取的數目必須是較少的那堆石子數目的整數倍,最後誰能夠把一堆石子取空誰就算贏。
比如初始的時候兩堆石子的數目是25和7。
25 7 --> 11 7 --> 4 7 --> 4 3 --> 1 3 --> 1 0
選手1取 選手2取 選手1取 選手2取 選手1取
最後選手1(先取的)獲勝,在取的過程中選手2都只有唯一的一種取法。
給定初始時石子的數目,如果兩個人都採取最優策略,請問先手能否獲勝。
【輸入】
輸入包含多數資料。每組資料一行,包含兩個正整數a和b,表示初始時石子的數目。
輸入以兩個0表示結束。
【輸出】
如果先手勝,輸出"win",否則輸出"lose"。
【輸入樣例】
34 12
15 24
0 0
【輸出樣例】
win
lose
【提示】
假設石子數目為(a,b)且a >= b,如果[a/b] >= 2則先手必勝,如果[a/b]<2,那麼先手只有唯一的一種取法。[a/b]表示a除以b取整後的值。
【心得】使用變數標記先後手即可。
【AC程式碼】
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
bool dfs(int a,int b,bool flag)
{
if(a>=2*b||a%b==0) return flag;
else return dfs(b,a-b,!flag);
}
int main()
{
int a,b;
while(scanf("%d %d",&a,&b)==2)
{
if(a==0&&b==0) break;
if(a<b) swap(a,b);
if(dfs(a,b,true)) cout<<"win"<<endl;
else cout<<"lose"<<endl;
}
return 0;
}
相關文章
- 資訊學奧賽一本通 1118:鋪地毯 視訊題解
- 資訊學奧賽一本通 1289:攔截導彈(evd)
- 資訊學奧賽一本通 1272:分組揹包(evd)
- 資訊學奧賽一本通 1032:大象喝水 | OpenJudge NOI 1.3 14
- 資訊學奧賽一本通 1322:攔截導彈問題(evd)
- 資訊學奧賽一本通 1051:分段函式 | OpenJudge NOI 1.4 13函式
- NYOJ 1427-小石子游戲【石子合併】
- 資訊學奧賽一本通1099:第n小的質數 視訊題解
- 資訊學奧賽一本通 1230:尋找平面上的極大點(evd)
- 資訊學奧賽一本通 1027:輸出浮點數 | OpenJudge NOI 1.1 07
- leetcode - 1686 - 石子游戲 VI - 貪心 - 數學分析LeetCode
- 資訊學奧賽一本通 1012:計算多項式的值 | OpenJudge NOI 1.3 07
- 資訊學奧賽一本通 1035:等差數列末項計算 | OpenJudge NOI 1.3 18
- 資訊學奧賽一本通 1029:計算浮點數相除的餘 | OpenJudge NOI 1.3 11
- 資訊學奧賽一本通 1016:整型資料型別儲存空間大小 | OpenJudge NOI 1.2 01資料型別
- 資訊學奧賽一本通 1018:其他資料型別儲存空間大小 | OpenJudge NOI 1.2 03資料型別
- 資訊學奧賽一本通 1010:計算分數的浮點數值 | OpenJudge NOI 1.3 05
- 資訊學奧賽考點
- 【leetcode 1510 石子游戲】【記憶化搜尋】LeetCode
- C++奧賽一本通貪心題解C++
- 一、資訊學奧賽簡介
- 突破資訊學奧賽生天花板
- 取沙子游戲
- 信奧賽陳老師解一本通題: 1070:人口增長
- 資訊學奧賽--C語言筆記(一)C語言筆記
- 信奧賽一本通陳老師解題 1128:影像模糊處理
- 信奧一本通1164:digit函式Git函式
- 信奧一本通1403:素數對
- 資訊學奧賽複賽複習01-CSP-J2019-01-字元、字元陣列、字串、string、字串讀取字元陣列字串
- 信奧賽C++老師解一本通題: 1180:分數線劃定C++
- 信奧一本通1187:統計字元數字元
- 南沙C++信奧賽陳老師解一本通題 1117:整數去重C++
- 南沙C++信奧賽陳老師解一本通題 1270:【例9.14】混合揹包C++
- 南沙C++信奧賽陳老師解一本通題 2099:【23CSPJ普及組】公路(road)C++
- 南沙C信++奧賽陳老師解一本通題: 1314:【例3.6】過河卒(Noip2002)
- 南沙C++信奧賽陳老師解一本通題 1345:【例4-6】香甜的黃油C++
- 南沙C++信奧賽陳老師解一本通題 1230:尋找平面上的極大點C++
- 南沙C++信奧賽陳老師解一本通題 1950:【10NOIP普及組】接水問題C++