100 atcoder#ABC128F. [ABC128F] Frog Jump

[ABC128F] Frog Jump

配点 : 600600

問題文

無限に広がる池があり、数直線とみなせます。この池には NN 個の蓮が浮かんでおり、それらは座標 0,1,2,....N2,N10,1,2,....N-2,N-1 にあります。

あなたは、最初座標00 の蓮の上にいます。あなたは、以下の手順に従ってゲームを行うことにしました。

  • 1.正の整数 A,BA,B を決める。得点ははじめ 00 である。
  • 2.現在の位置を xx として、y=x+Ay=x+Aとする。xx にある蓮を消して、yy に移動する。
    • y=N1y=N-1 ならば、ゲームが終了する。
    • そうでなくて、yy に蓮があるならば、得点が sys_y 増加する。
    • そこに蓮がないならば、あなたは溺れる。得点が 1010010^{100} 減少して、ゲームが終了する。
  • 3.現在の位置を xx として、y=xBy=x-Bとする。xx にある蓮を消して、yy に移動する。
    • y=N1y=N-1 ならば、ゲームが終了する。
    • そうでなくて、yy に蓮があるならば、得点が sys_y 増加する。
    • そこに蓮がないならば、あなたは溺れる。得点が 1010010^{100} 減少して、ゲームが終了する。
  • 4.手順2に戻る。

あなたは、最終得点をできるだけ大きくしたいです。 最適に A,BA,B の値を決めたときの最終得点はいくらになるでしょうか。

制約

  • 3N1053 \leqq N \leqq 10^5
  • 109si109-10^9 \leqq s_i \leqq 10^9
  • s0=sN1=0s_0=s_{N-1}=0
  • 入力はすべて整数である。

入力

入力は以下の形式で標準入力から与えられます。

NN

s0s_0 s1s_1 ............ sN1s_{N-1}

出力

最適に A,BA,B の値を決めたときの最終得点を出力してください。

5
0 2 5 1 0
3

A=3,B=2A = 3, B = 2 としたとき、ゲームは次のように進行します。

  • 座標 0+3=30 + 3 = 3 に移動し、得点が s3=1s_3 = 1 増加する。
  • 座標 32=13 - 2 = 1 に移動し、得点が s1=2s_1 = 2 増加する。
  • 座標 1+3=41 + 3 = 4 に移動し、得点 33 でゲームが終了する。

得点 44 以上でゲームを終了することはできないため、答えは 33 です。座標 22 にある蓮に乗ってその後溺れずに済ますことはできないことに注意してください。

6
0 10 -7 -4 -13 0
0

ここでの最適な戦略は、A=5A = 5 を選んで (BB の値は不問) ただちに最後の蓮に乗ることです。

11
0 -4 0 -99 31 14 -15 -39 43 18 0
59