考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC137-B - One Clue を解く

ABC137-B - One Clue

 

数直線上に 2000001 個の石が置かれている

石の座標は -1000000, -999999, -999998, ... , 999999, 1000000 である

 

これらの石の内、連続する K 個が黒で塗られており

それ以外は白で塗られている

 

座標 X が黒であることがわかっているとき

黒で塗られている可能性のある座標を全て求めて、小さい順に出力する

 

まずは、黒で塗られている座標 X の石は

連続する K 個の石のどの順番の石であるか考えてみる

 

例えば、左端の石であった場合、その右にある K - 1 個の石も黒であるとわかる

右端の石であった場合も同様に、その左にある K - 1 個の石も黒となる

 

したがって、X - ( K - 1 ) X + ( K - 1 ) の範囲を

全て出力すればそれが答えになると考えられる

 

ただし、石の座標は -1000000, -999999, -999998, ... , 999999, 1000000

と範囲に制限があるので、上記の範囲がこの制限内に納まることを

チェックする必要がある

 

以上を踏まえて書いたコードを以下に示す

 

提出したコード

# 入力
K,X=map(int,input().split())

# 左端・右端を求める
l=X-(K-1)
r=X+(K-1)

# 左端・右端が制限をオーバーする場合は置き換える
if l<-1000000:
  l=-1000000

if 1000000<r:
  r=1000000

ans=[]
for i in range(l,r+1):
  ans.append(i)

# 出力
print(' '.join(str(x) for x in ans))

 

提出結果はACでした