F - Hammer 2 Editorial by snuke
より高速な解法壁ハンマーのペアについて
壁とハンマーの座標が両方正のとき、
- \(Z_i \lt Y_i\) の場合:壁の前に必ずハンマーを通るため、この壁は無視して良い。
- \(Y_i \lt Z_i\) の場合:壁を通ることは不可能。このタイプの壁の \(Y_i\) の最小値より外へは行けない、という扱いをすればいい。
両方負の場合も同様なので、以降は正負が逆(壁とハンマーが反対側)のものだけを考慮すれば良い。
O(N log N) 解法
原点~ゴール間にある壁に対応するハンマーの座標のうち最も遠いものを \(Z'\) とする。(上記の考察により \(Z'\) はゴールと反対側にある)
- \(Z'\) には到達しなければならない
- \(Z'\) に到達できれば、後は直接ゴールへ行けば良い
よってゴールが \(Z'\) だと思って問題を解き、\(|X-Z'|\) を足せば良い。
これを高々\(N\) 回繰り返し、原点~ゴール間に壁がない状態にできれば良く、ならなかったら循環参照みたいになってるので \(-1\)。
座標のソート以外は線形で出来そう。
https://atcoder.jp/contests/abc273/submissions/35815852
解説放送でACしたコード、通れない壁の処理を「ゴールより近いなら-1、遠いなら無視」としてたので、以下のケースで落ちますね。
ハハ壁高壁ゴ
みたいなの
2 2 1 -1 -2 -3
posted:
last update: