atcoder#ABC217H. [ABC217H] Snuketoon
[ABC217H] Snuketoon
配点 : 点
問題文
AtCoder 社が開発したゲーム『スヌケトゥーン』は、プレイヤーがすぬけ君を操作して水鉄砲から飛んでくる水を回避するゲームです。
ゲームのステージは無限に続く数直線からなり、ゲーム開始時点ですぬけ君は地点 にいます。 ゲーム開始直後から、すぬけ君は 秒ごとに「 小さい地点に移動」「 大きい地点に移動」「動かない」の 択から行動を選べます。より厳密には、すぬけ君がゲーム開始後 秒 , は整数 の時点で地点 にいるとき、 秒の時点では地点 ・地点 ・地点 の ヵ所のいずれかに行くことができます。
すぬけ君は水鉄砲から発射された水を浴びるとダメージを受けてしまいます。水鉄砲は 回発射されて、 回目の発射は を用いて次のように表されます。
- ゲーム開始から 秒後に左右いずれかから水が発射されます。すぬけ君が 秒の時点でいる地点を としたとき、ダメージを受ける範囲および値は次の通りです。 - のとき、 の範囲にいると のダメージを受ける。
- のとき、 の範囲にいると のダメージを受ける。
プロゲーマーの高橋君は、攻略情報をツイートするために 回目の水鉄砲の発射が終わった後のすぬけ君の合計ダメージを最小化することにしました。高橋君が合計ダメージを最小化するようにすぬけ君を操作したときの合計ダメージを求めてください。
制約
- は または
- 入力は全て整数である。
入力
入力は以下の形式で標準入力から与えられる。
出力
高橋君が合計ダメージを最小化するようにすぬけ君を操作したときの合計ダメージを出力せよ。
3
1 0 3
3 1 0
4 0 6
7
便宜上 をゲーム開始から経過した秒数を表す変数とします。全ての水鉄砲の発射が終了するまでのすぬけ君の最適な動きは以下の通りです。
- のときすぬけ君は地点 にいます。すぬけ君は 大きい地点に移動します。
- のときすぬけ君は地点 にいて、 回目の水鉄砲の発射により のダメージを受けます。すぬけ君は 小さい地点に移動します。
- のときすぬけ君は地点 にいます。すぬけ君は移動しません。
- のときすぬけ君は地点 にいて、 回目の水鉄砲の発射によるダメージを受けません。すぬけ君は 大きい地点に移動します。
- のときすぬけ君は地点 にいて、 回目の水鉄砲の発射により のダメージを受けます。
このときすぬけ君は合計で のダメージを受けるので、 を出力します。
3
1 0 1
6 1 1
8 0 -1
0
5
1 0 1000000000
2 1 -1000000000
3 0 1000000000
4 1 -1000000000
5 0 1000000000
4999999997