THIRD プログラミングコンテスト 2023 アルゴ(AtCoder Beginner Contest 318)の解説記事です。
目次
ABC318 A – Full Moon
問題
解法1
M
日目からN
日目の間、P
日ごとに解答に1
を足す操作を行う。
解説
まず入力 \(N\) , \(M\) , \(P\) をint
として受け取ります。
# 入力
N,M,P=map(int, input().split())
解答用の変数を初期値0
で用意します。
# 解答用の変数
ans=0
\(M\) 日目から \(N\) 日目の間、 \(P\) 日ごとに解答に1
を足す操作を行う。
最後に答えを出力します。
# M日目からN日目の間
while M<=N:
# 解答に1を足す
ans+=1
# P日後
M+=P
# 解答を出力
print(ans)
解答
# 入力
N,M,P=map(int, input().split())
# 解答用の変数
ans=0
# M日目からN日目の間
while M<=N:
# 解答に1を足す
ans+=1
# P日後
M+=P
# 解答を出力
print(ans)
解法2
植木算として考える。
解説
問題文は \(M\) メートル先から\(N\) メートルの先までの道に \(P\) メートル間隔で木を植えるとき何本植えられますか?と同じ意味になります。
つまり、長さ \(N – M\) メートルの道に \(P\) メートル間隔で木を植えるとき何本植えられますか?と言い換えられるので、\(N – M\)が0
未満であれば0
、0
以上の場合は \(N – M\) を \(P\) で割った整数部分プラス1
になります。
これは次のように書けます。
print(0 if N-M<0 else (N-M)//P+1)
解答
# 入力
N,M,P=map(int, input().split())
# 解答を出力
print(0 if N-M<0 else (N-M)//P+1)