初めての質問になります。
競技プログラミングをJavaで行っているのですが、
考え方が分からない問題があるため、質問させてください。
問題
(x,y) 平面上の格子点がある。 現在、(X1,Y1) にいる。格子点(X2,Y2) に到達したい。 以下の移動を行うことができる。 点の x が偶数のとき、y 軸の正の方向に移動する。 点の x が奇数のとき、y 軸の負の方向に移動する。 点の y が偶数のとき、x 軸の正の方向に移動する。 点の y が奇数のとき、x 軸の負の方向に移動する。 これらの移動を繰り返すことで格子点 (X2,Y2)に到達するために必要な移動距離の最小値を求めよ。
入力が、(0, 1) (5, 1)の際の回答は、7です。
(0,1) → (0,2) → (5,2) → (5,1) と移動するため、最短は7となるみたいです。
入力が(100000000, 100000000) (-100000000 -100000000)の場合は、
(100000000,100000000) → (100000001,100000000) →
(100000001,−100000001) → (−100000000,−100000001) → (−100000000,−100000000) と移動し、最短は400000004でした。
ノートに格子を書いて、最短移動させる道筋は値が小さければ分かるのですが…
アルゴリズムがいまいち理解出来ていないため、コーディングも出来ません。。
考え方のみでも良いので、助言頂けると幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/26 10:25