A - Moving Slimes Editorial by maroonrk_admin
\(K=N\) の場合にシミュレーションなしで解く方法を考えます.
スライムは合体しないものとしても答えは変わりません. 自分と同じ座標にいるスライムは速度に影響しないものとすればよいです.
先頭 \(i\) 匹のスライムの重心の座標を \(X_i\),末尾 \(N-i\) 匹のスライムの重心の座標を \(Y_i\),\(Z_i=Y_i-X_i\) とします.
\(Z_i\) が減少する速度を考えます. \(A_i<A_{i+1}\) である限りは,速度 \(N\) で減少します. また,\(A_i=A_{i+1}\) のときに減少速度が \(N\) より小さくなります.\(A_i\) と同じ座標にいるスライムの数で減少の度合いは変わりますが,なんにせよ \(N\) より小さくなります.
すべてのスライムが同じ座標にいる状態では,\(Z_i=0\) がすべての \(1 \leq i \leq N-1\) について成立します. よって答えの下限として \(\max(Z_i)/N\) が得られます.
次に,\(A_i=A_{i+1}\) になる時刻について考えます. 時刻 \(t=Z_i/N\) まで \(A_i<A_{i+1}\) だったとしましょう. すると,\(Z_i\) の減少速度はずっと \(N\) だったわけですから,時刻 \(t\) には \(Z_i\) は \(0\) になっています. このとき明らかに \(A_i=A_{i+1}\) も成立しています. 結局,\(A_i=A_{i+1}\) が成立する最初の時刻は,\(Z_i/N\) 以下であることがわかります.
すべてのスライムが同じ座標にいる状態では,\(A_i=A_{i+1}\) がすべての \(1 \leq i \leq N-1\) について成立します. よって答えの上限として \(\max(Z_i)/N\) が得られます.
ここで上限と下限が一致したため,答えはちょうど \(\max(Z_i)/N\) とわかります.
ここまでの考察を元に \(K<N\) のケースを解きます. 各 \(1 \leq i \leq K-1\) について,先頭 \(i\) 匹と末尾 \(K-i\) 匹の重心の座標の差を最大化することを考えます. これは素直に入力の \(N\) 匹のスライムの先頭 \(i\) 匹と末尾 \(K-i\) を取ってくればよいです.
以上を実装すれば \(O(N)\) でこの問題は解けます.
posted:
last update: