まず、本を持ちながら移動しなければいけない距離は Σ|i-p[i]|
以上なのは明らかで、逆にこれで十分なことも言える。
本を持たずに移動する距離を最小化したい。
本の台を頂点として、隣どうしの台を辺で繋いだグラフを考える。
i
〜p[i]
の間の辺に+1するってのを累積和とかでやっておく。(これをd[0~n-2]
とする)
s = 0
の場合、i≠p[i]
な i の最大値を mi として、「d[0]
からd[mi-1]
までの間にある 0 の個数」*2 が求めたいもの。
これで 50 点が来る。
s が真ん中だった場合なんでダメなのかは、2,1,0
とかを考えると分かるように、開始地点を跨いでるだけだと追加コストが生える。