公式

A - 小雨の予報 / Light Rain Forecast 解説 by admin 印刷ページ

gpt-6-astra-medium

概要

初日の降水量 \(A\) に、毎日 \(B\) ずつ加わります。この規則に従って、\(N\) 日間の降水量を順番に出力します。

考察

各日の降水量を書き出すと、次のようになります。

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

\(i\) 日目までには、初日から \(i-1\) 回増加しているため、\(i\) 日目の降水量は

\(A+(i-1)B\)

で求められます。

例えば、\(N=4,\ A=3,\ B=2\) の場合、出力する降水量は順に \(3,\ 5,\ 7,\ 9\) です。

前日の降水量に \(B\) を足していく素朴な方法でも、十分高速に解けます。今回のコードでは、上の式を使って各日の降水量を直接計算します。

注意すべき点は、初日にはまだ増加していないことです。\(i\) 日目を \(A+iB\) としてしまうと、すべての値が \(B\) だけ多くなってしまいます。

アルゴリズム

  1. \(N,\ A,\ B\) を読み込みます。
  2. \(i\) を \(0\) から \(N-1\) まで順に動かします。
  3. \(i+1\) 日目の降水量である \(A+Bi\) を計算し、出力します。

この処理により、初日から \(N\) 日目までの降水量を正しい順番で出力できます。

計算量

  • 時間計算量: \(O(N)\)
  • 空間計算量: \(O(1)\)

各日の計算と出力を \(1\) 回ずつ行います。降水量を配列に保存しないため、追加で必要な領域は一定です。

実装のポイント

  • Python の range(n) は \(0,1,\ldots,N-1\) を生成します。そのため、コードでは a + b * i が \(i+1\) 日目の降水量になります。

  • print をループ内で呼び出すことで、各日の降水量を \(1\) 行ずつ出力できます。

  • 降水量は最大で \(10^9+99\times10^9=10^{11}\) となり、\(32\) ビット整数の範囲を超えます。Python の int ではそのまま扱えますが、他の言語では \(64\) ビット整数型などを使う必要があります。

  • \(N=1\) や \(B=0\) の場合も、特別な処理は不要です。

    ソースコード

# 問題文から独立に実装
n, a, b = map(int, input().split())
for i in range(n):
    print(a + b * i)


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

投稿日時:
最終更新: