ABC135 E - Golf
E - Golf の解説とはちょっと違う解き方
(適当なゴルフ用品のリンクを貼るスペース)
まず にします(出力の際に 倍や swap で直してあげればいいです)
移動回数を と置くと、移動する道のりは 、移動する距離は と表せます
が の倍数じゃない時は道のりと距離が一致しないのでどこかで相殺(一度目的地と反対方向に向かう無駄な動き)が必要になることがわかります
相殺は [目的地と反対方向に 動いた後、目的地の方向に 動くことで元の場所に戻ってくる] でワンセットなので、道のりを偶数分のみ無駄に出来ます
つまり、反対方向へ合計で だけ動くとおくと という式が出来上がります( は非負整数)
この式を睨むとわかる事として、
- これは が偶数で が奇数だと無理
- そうでないならこの式が成り立つような は必ず(たくさん)存在する
- AtCoder なので基本的に 2 の のうち が最小なものが答え
- 3から基本 は より大きくはならない( なら を、 を 減らせるので)( の場合はちょっと特殊で、これは簡単なので先に場合分けで潰しておけばいい)
考察は8割くらい終わりで、ここからは実装を考えながら残りの2割を詰めます
が最小となる を求めます(適当にループ書く)
相殺をして貪欲に動きます
相殺パート
貪欲パート
- if(目的地までx方向で以上距離がある) x 方向に 動いた地点を出力
- else if(目的地までy方向で以上距離がある) y 方向に 動いた地点を出力
- else if(目的地に着いてない) (x,y) を出力
Submission #9367764 - AtCoder Beginner Contest 135
*1:、、 という仮定から のケースを考える必要がない事が大事