AtCoder Grand Contest 020の解説記事です。
目次
AGC020 A – Move and Win
問題
問題文の要約は以下の通りです。
問題の要約
\(N\) 個のマスがある細長い紙切れの上にアリスとボリスの駒が置かれています。アリスの駒はマス \(A\) に、ボリスの駒はマス \(B\) に配置され、アリスが先手でゲームを始めます。各ターンで、プレイヤーは自分の駒を隣接するマスに移動させる必要がありますが、駒を紙切れの外に出したり、相手の駒と同じマスに動かすことは禁止されています。移動できなくなったプレイヤーが負けとなります。二人とも最適に行動した場合、どちらが勝つか判定せよ。
解説
実際にシミュレーションを行う。
解説
相手の駒と隣接した場合には遠ざかる方向に、そうでない場合には相手に近づく方向に動かすことが最善です。これを実際にシミュレーションします。
解答
# 入力
N,A,B=map(int,input().split())
while True:
# アリスの駒がボリスの駒の隣にある場合、アリスは左に動かす
if A+1==B:
A-=1
# アリスが紙切れの端に達したら、ボリスの勝ち
if A==0:
print('Borys')
exit()
# それ以外の場合、アリスは右に動かす
else:
A+=1
# ボリスの駒がアリスの駒の隣にある場合、ボリスは右に動かす
if B-1==A:
B+=1
# ボリスが紙切れの端に達したら、アリスの勝ち
if B==N+1:
print('Alice')
exit()
# それ以外の場合、ボリスは左に動かす
else:
B-=1