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 を使います。
アルゴリズム
- \(N,A,B\) を読み込みます。
- 現在の降水量を表す変数
curを \(A\) で初期化します。 - 次の処理を \(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 によって生成されました。