解法
毎回愚直に計算するともちろん間に合わないので何か工夫をする必要があります。そこで登場するのが累積和です。
まず、始点と終点も観光スポットとみなし、としておきます。
観光スポット
から
まで順番に行ったときにかかる金額の総和
とします。
これは、
という計算をすることで求めることができます。しかし、を求めるのに、
を利用すると、
であることから、
というように変形できます。
これにより、を
で、
から
すべてについての
を求めるのに
で計算できるようになりました。
さて、は、観光スポット
から、という区間についてしか計算できません。
という区間についてのみ移動した場合の金額を計算するにはどうすればよいかというと、
という計算ができればよいので、式を変形すると
となります。
よって、始点をにした計算式に置き換えることができたので、
を利用して、
と計算すればよいことになります。
さて、下準備ができたので、番目のスポットに行かない場合の金額の計算を行います。
このとき、移動ルートは次のようになり、それぞれ以下のようにして計算できます。
を参照するだけでよいです。
から直接
へ
を計算すればよいです。
先ほど求めたように、を計算すればよいです。
ということで、上の3つを組み合わせ、
が答えになります。これはで計算できるので、
回答えるには、
かかりますが、十分間に合います。
解法
累積和入門にちょうどいいと思います。
添え字のバグにも注意しつつコードを書く必要があるのでそこだけ大変でした。