Official

E - Traveler Editorial by QCFium


同じ色のボールをどのような順番で取っていくかが焦点となります。 色 \(i\) のボールが \(k\) 個あって、その座標が \(x_1, x_2, x_3, \dots, x_k(x_1 < x_2 < x_3 < \dots < x_k)\) だったとします。
この時、一つ前の色のボールを取り終わった時にどこにいたかに関わらず、色 \(i\) のボールのうち最後に取るのは \(x_1\) にあるボールか \(x_k\) にあるボールのどちらかであるとしてよいことが示せます。(色 \(i\) のボールを通過したのに回収しないという行動に意味はなく、\(x_1\)\(x_k\) を両方訪れた時には、その間にあるボールは全て通過しているから)
よって \(\mathrm{dp}[i][j] : \)\(i\) のボールのうち、\(j = 0\) なら一番左、\(j = 1\) なら一番右のものと同じ位置にいて、色 \(i\) のボールは全て回収し終わった状態になるまでの最小の時間
という動的計画法を用いることで \(O(N)\) で解くことができます。(その色のボールが存在しないような色は存在しなかったことにします)

より詳細には、色 \(i\) のボールの座標の最小値 を \(l\)、最大値を \(r\) としたときに、色 \(i - 1\) までを全て回収して座標 \(x\) にいる状態から色 \(i\) を全て回収して座標 \(l\) にいる状態になるまでの最小時間は以下の通りです。

  • \(x \le r\) のとき : \(r\) まで右に行ってから \(l\) まで左に帰ってくるので \((r - x) + (r - l)\)
  • \(x \gt r\) のとき : ひたすら左に動いて \(l\) まで来ればよいので \(r - x\)

\(i - 1\) までを全て回収して座標 \(x\) にいる状態から色 \(i\) を全て回収して座標 \(r\) にいる状態になるまでの最小時間も同様に求められるので、\(O(1)\)\(\mathrm{dp}[i -1]\) から \(\mathrm{dp}[i]\) に遷移できます。

posted:
last update: