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\) だけ多くなってしまいます。
アルゴリズム
- \(N,\ A,\ B\) を読み込みます。
- \(i\) を \(0\) から \(N-1\) まで順に動かします。
- \(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 によって生成されました。
投稿日時:
最終更新: