AtCoder Beginner Contest 048 B – Between a and b … をPython3で解く

Share


AtCoder
上にある問題のうち、AtCoder Problemsでdiff 800以上と判定されているものを順番に解いていく企画。
基本的な考え方は全てコード中のコメントに入れてあるので、参照のこと。

出典:
AtCoder Beginner Contest 048 B – Between a and b

制約が大きいので、一発で求める必要がある。
~の間で~と考えると意外と面倒くさいので、より単純な問題に分解してやると、解きやすい。

# AtCoder Beginner Contest 048 B - Between a and b ...
# https://atcoder.jp/contests/abc048/tasks/abc048_b
# tag: 整数 倍数 基礎問題 コーナーケース 数え上げ

# 一見簡単だが、意外とコーナーケースに引っかかりがちな問題。
# 余りの差分が~などと、ややこしく考え始めるとハマるので、
# シンプルに問題を分解してやるほうがいい。

# まず、0 ~ n の間に x で割り切れる数はいくつあるのかを考えてやる。
def count_div(n, x):
# n < 0 のコーナーケースに注意……といいつつ
# (-1 // 2) + 1 = 0 なので、実は無くてもちゃんと動く。
if n < 0:
return 0
# 0 も含むので、1 足してやる
else:
return (n // x) + 1

def main():
a, b, x = map(int, input().split())

# 0 ~ b の区間の数から、0 ~ a-1 の区間の数を引いてやればいい
print(count_div(b, x) - count_div(a-1, x))

main()
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です