Pythonで歩む競プロ
ということで、やっていきます。まず手始めに、AtCoder Beginner Contest,通称ABCをやっていきます。名前の通り初心者向けのコンテストです。最新の問題ABC137のB問題について書きます。
数直線上に 2000001個の石が置かれています。これらの石の座標は −1000000,−999999,−999998,…,999999,1000000です。
これらの石のうち、ある連続する K個の石が黒で塗られており、それ以外の石は白で塗られています。
また、座標 Xにある石は黒で塗られていることが分かっています。
黒で塗られている石が置かれている可能性のある座標をすべて、小さい順に出力してください。
さあ、やっていきましょう。数直線らしいので、数直線を実際に書いてみます。
そして連続するK個が黒で他全部が白と。そして座標X。文字で起こすより図で考えます。
偶とか奇とかは気にしないでください。関係なかったです。
だいぶ見えてきたように思えます。次に仮説というか、使えそうな式等々を考えていきます。
さて、あとは実装です。ループさせたらいいんかな?と思ってwhileを使ってみました。表示して1足して表示して、変数ans1とans2が同値になったらいけるかな?
と思いましたが、どうもうまくいきません。例題の数値で試しても思った結果になりませんでした。じゃあwhile Trueじゃなくてfor構文でやってみるか。
k, x = map(int, input().split())
for i in range(x-k+1, x+k):
print(i)
こうすると上手くいきました!なるほど、for構文なんですね。勉強になりました。ちなみにこれだと、横一列に表示ではなく縦一列に表示されます。それが嫌だったら、
k, x = map(int, input().split())
for i in range(x-k+1, x+k):
print(i, end=" ")
とすると、横一列に出力されるはずです。
これを提出するとACを貰えました!これでB問題は終了です。お疲れ様でした。
こんな感じの投稿をしていこうと思います。
いただきましたサポートは私のモチベとして次作に還元させていただきます!!