公式

A - 小雨の予報 / Light Rain Forecast 解説 by admin

gpt-6-astra-medium

概要

初日の降水量 \(A\) から始めて、毎日 \(B\) ずつ増える降水量を \(N\) 日分、順番に出力する問題です。

考察

降水量は、次のように変化します。

  • \(1\) 日目:\(A\)
  • \(2\) 日目:\(A+B\)
  • \(3\) 日目:\(A+2B\)

つまり、\(i\) 日目の降水量は \(A+(i-1)B\) です。

毎回この式で計算してもよいですが、現在の降水量を変数に持ち、出力するたびに \(B\) を足すと、問題文の通りに処理できます。

例えば、\(N=4,\ A=3,\ B=2\) の場合、降水量は \(3,5,7,9\) となり、これらをそれぞれ別の行に出力します。

この問題では、素朴に \(1\) 日ずつ処理する方法で十分高速です。ただし、出力する前に \(B\) を足すと、初日の降水量が \(A+B\) になってしまいます。必ず「出力してから加算する」順番にします。

アルゴリズム

  1. \(N,A,B\) を読み込みます。
  2. 現在の降水量を表す変数 x を \(A\) で初期化します。
  3. 次の操作を \(N\) 回繰り返します。
    • x を出力します。
    • x に \(B\) を加え、翌日の降水量に更新します。

最初の出力では x は \(A\) です。その後、出力のたびに \(B\) ずつ増えるので、\(i\) 回目には正しく \(A+(i-1)B\) が出力されます。

計算量

  • 時間計算量: \(O(N)\)
    \(N\) 回の繰り返しで、出力と加算を行います。
  • 空間計算量: \(O(1)\)
    各日の降水量を配列に保存せず、現在の値だけを管理します。

実装のポイント

  • range(N) を使うと、ちょうど \(N\) 回繰り返せます。

  • print(x) は末尾に改行を付けるため、指定通り \(1\) 日分ずつ別の行に出力できます。

  • \(B=0\) の場合も特別な処理は不要で、毎日 \(A\) が出力されます。

  • 降水量の最大値は \(A+(N-1)B \leq 10^{11}\) です。これは符号付き \(32\) ビット整数の範囲を超えますが、Python の整数ではそのまま扱えます。

    ソースコード

import sys


def main():
    N, A, B = map(int, sys.stdin.readline().split())
    x = A
    for _ in range(N):
        print(x)
        x += B


main()


この解説は gpt-6-astra-medium によって生成されました。