競技プログラミング用 知識集積所
ABC426E - Closest Moment
最終更新:
sport_programming
-
view
問題
必要知識
B以下レベルの内容は省略
別解の場合
考え方
まず、この問題には、話をややこしている要因が2つある。
1つめは、先に止まるのが高橋君か青木君かわからない点。
これは、2人の移動距離を計算し、青木君の移動距離の方が短ければ2人のデータをswap()※することで、高橋君が先に止まる、または同時に止まる前提で考えることができる。
これは、2人の移動距離を計算し、青木君の移動距離の方が短ければ2人のデータをswap()※することで、高橋君が先に止まる、または同時に止まる前提で考えることができる。
2つめは、両者が動くと距離の式がややこしくなる点。
これは、相対座標を取ることで、高橋君を実質的に原点に固定して対応する。
これは、相対座標を取ることで、高橋君を実質的に原点に固定して対応する。
スタートのときの相対位置をA、高橋君が止まるときの相対位置をB、青木君が止まるときの相対位置をCとすると、結局折れ線ABCの原点からの距離の最小値を取ればよい。
ただし、Bの青木君の座標は、実際に青木君を必要な時間動かしてみて座標計算をする。
ただし、Bの青木君の座標は、実際に青木君を必要な時間動かしてみて座標計算をする。
原点に最も近い点の候補は
- 点A
- 原点から線分ABにおろした垂線の足(AB間にあった場合)
- 点B
- 原点から線分BCにおろした垂線の足(BC間にあった場合)
- 点C
の最大5か所。
解答例
注意点
別解
三分探索※を行う
時刻tから2人の距離を求める関数を実装し、三分探索※をしてもよい。
三分探索※は「途中までは減少し、途中から増加する」「常に減少」「常に増加」のいずれかに当てはまるものにしか適用できない。
そのため、全体に対して用いることはできないが、「最初から1人目が止まるまで」「1人目が止まってから2人目が止まるまで」とわければそれぞれに三分探索※が適用できる。
よって、三分探索※を2回やり、最小値が小さかった方を答えればよい。
解答例
三分探索※は「途中までは減少し、途中から増加する」「常に減少」「常に増加」のいずれかに当てはまるものにしか適用できない。
そのため、全体に対して用いることはできないが、「最初から1人目が止まるまで」「1人目が止まってから2人目が止まるまで」とわければそれぞれに三分探索※が適用できる。
よって、三分探索※を2回やり、最小値が小さかった方を答えればよい。
解答例