考えて競プロする

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

ABC093-B - Small and Large Integers を解く

ABC093-B - Small and Large Integers

 

A以上B以下の数の中で

小さい方からK番目以内 または 大きい方からK番目以内の数を

数が小さい順に列挙していく問題

 

A = 100 , B = 200 , K = 5 の場合なら

100〜104 の5個と、196〜200 の5個を列挙する

 

かなり簡単そうに見えるが、一つ落とし穴がある

それは、小さい方からの範囲と大きい方からの範囲が被っている場合である

 

この場合は、全体で 2 × K 個も数字がないので

与えられた数字全てが答えとなる

 

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

 

提出したコード

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

if B-A+1<2*K:
  # 範囲内の全数字を出力
  for i in range(A,B+1):
    print(i)
else:
  # 小さい方からK個出力
  for i in range(A,A+K):
    print(i)
  # 大きい方からK個出力
  for i in range(B-K+1,B+1):
    print(i)

 

提出結果はACでした