Official

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

gpt-6-astra-medium

概要

初日の降水量 \(A\) から始めて、毎日 \(B\) ずつ増やした値を \(N\) 日分、順番に出力します。

考察

降水量は、前日の値に \(B\) を足すことで求められます。したがって、各日の降水量は次のようになります。

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

一般に、\(i\) 日目の降水量は \(A+(i-1)B\) です。

例えば、\(N=4,\ A=3,\ B=2\) なら、降水量は順に \(3,5,7,9\) となります。

この問題では、日ごとに値を計算して出力する素朴な方法で十分間に合います。すべての値を配列に保存する必要もなく、現在の降水量だけを変数に保持すればよいです。

ただし、降水量は最大で

\(A+(N-1)B \leq 10^9+99\times 10^9=10^{11}\)

となります。これは一般的な \(32\) ビット整数型に収まらないため、C++ では long long を使います。

アルゴリズム

  1. \(N,A,B\) を読み込みます。
  2. 現在の降水量を表す変数 cur を \(A\) で初期化します。
  3. 次の処理を \(N\) 回繰り返します。
    • cur を出力します。
    • cur に \(B\) を足します。

最初の出力は \(A\) です。その後、出力するたびに \(B\) を足すので、次の出力時には翌日の降水量になります。これを \(N\) 回繰り返すことで、求める各日の降水量を順番に出力できます。

計算量

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

実装のポイント

  • 降水量を扱う a, b, cur には long long を使います。

  • 出力してから \(B\) を足す順番にします。先に足すと、初日に \(A+B\) を出力してしまいます。

  • 各日の降水量を出力した後に改行し、合計 \(N\) 行を出力します。

  • \(B=0\) の場合も、同じ処理で \(A\) を \(N\) 回出力できます。

    ソースコード

// 問題文から独立に実装: 前日の値に B を足していく
#include <iostream>
int main() {
    int n; long long a, b; std::cin >> n >> a >> b;
    long long cur = a;
    for (int i = 0; i < n; ++i) { std::cout << cur << "\n"; cur += b; }
}


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