ABC137 B - One Clue

備忘録

問題

atcoder.jp

回答

import sys
import os


def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    K, X = list(map(int, sys.stdin.readline().split()))
    MAX = 1000000
    MIN = -1000000

    ret = [X]
    for i in range(1, K):
        if X + i <= MAX:
            ret.append(X+i)
        else:
            ret.append(X - K)

        if X - i >= MIN:
            ret.append(X-i)
        else:
            ret.append(X + K)

    print(*sorted(set(ret)))

if __name__ == '__main__':
    main()

考え方

range1からKまでとして、
数直線上のXから右(加算)の場合と左(減算)の場合をすべて算出し、
Xの最大値・最小値を考慮して回答の配列に追加した。
しかし、問題の制約をちゃんと読んだら、
Kの範囲は1≦K≦100Xの範囲は0≦X≦100なので、
黒で塗られている石の座標は-100 ~ 200までだった。。。
冗長な回答をしてしまったので、一応改善したコードも回答しておいた。。。

回答(改善後)

import sys
import os


def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    K, X = list(map(int, sys.stdin.readline().split()))

    ret = []
    for i in range(X-K+1, X+K):
        ret.append(i)

    print(*ret)

if __name__ == '__main__':
    main()

問題文はしっかり読もう。。。