問題概要
太郎君はロボットを遠隔で操縦している。
このロボットは現在$(0,0)$の座標に立っていて北の方向を向いている。
太郎君はいまこのロボットを$(X,Y)$の座標に移動させたいと思っている。
ロボットに出来る命令は、1回につき以下のうちいずれかの命令を選んで指示することができる。
・時計回りに、$90°$ その場で向き(進行方向)を変える。
・反時計回りに、$90°$ その場で向き(進行方向)を変える。
・向いている方向に $K$距離だけ前進する。$K$は、$(1≤K≤L)$ の範囲で、命令のたびに指定することができる。
$-10^9\leqq X,Y\leqq10^9$、$L\leqq10^9$
解法
軸上か場合分けすれば良い。
北側を向いているので、$Y≧0$としてY軸上のときは、0回の方向転換、そうでないときは1回の方向転換で移動できる。
$Y<0$のときは、2回で移動できる。
計算量:$O(1)$
ソース
#include <bits/stdc++.h> using namespace std; using VS = vector<string>; using LL = long long; LL X, Y, L; LL ans = 0LL; int main() { cin.tie(0); ios_base::sync_with_stdio(false); cin >> X >> Y >> L; int rot = 0; if (X != 0) { rot++; } if (Y < 0) { rot++; if (X == 0)rot++; } ans = (abs(X) + L - 1) / L + (abs(Y) + L - 1) / L + rot; cout << ans << "\n"; return 0; }