この問題はfor文と簡単な式変形を問います。

今のラテ君の残額を now(=A)\mathrm{now}(=A) として、これを問題の通りに計算します。具体的には ii 個目における計算は

  • nowTi0\mathrm{now}-T_i\ge 0 なら nownowTi\mathrm{now}\leftarrow \mathrm{now}-T_i
  • nowTi<0\mathrm{now}-T_i\lt 0 なら、now<0\mathrm{now}\lt 0 の間だけ nownowTi+B\mathrm{now}\leftarrow \mathrm{now}-T_i+B

となります。ただし PQP\leftarrow Q は変数 PP に値 QQ を代入する操作を表します。

しかし、この計算を愚直に計算していると、nowTi<0\mathrm{now}-T_i\lt 0 の計算でケースによっては時間制限に間に合わない場合があります。
そこで次のような式において、この式を変形することを考えます。

nowTi<0\mathrm{now}-T_i\lt 0 の場合、残額に BB を足すことを繰り返す回数は、一意に定まります。
この回数を kk として nowTi+kB0\mathrm{now} - T_i + kB\ge 0 を満たすことが、この計算処理を終わらせる条件です。

これを変形すると kTinowBk\ge \cfrac{T_i - \mathrm{now}}{B} であることがわかります。つまり k=TinowBk=\left\lceil\cfrac{T_i-\mathrm{now}}{B}\right\rceil ※と計算できます。
さらに nowTi<0\mathrm{now} - T_i\lt 0 より Tinow>0T_i-\mathrm{now}\gt 0 から、右辺に負数が出現しないことがわかります。

これより nowTi+kB0\mathrm{now} - T_i + kB\ge 0 を満たす最小の整数 kk を求めることができました。
これを計算式として用いることで、nowTi<0\mathrm{now}-T_i\lt 0 の計算を O(1)O(1) で処理することができます。

以上でこの問題を O(N)O(N) で正解することができます。

解答例(C++):

x\lceil x\rceilxx 以上で最小の整数を表します(天井関数といいます)。例えば 3.5=4\lceil 3.5\rceil=48=8\lceil 8\rceil=8 です。