TopCoder SRM 345 Div1 Easy Pathfinding
問題
(0,0)から(x,y)移動したい。
一回の移動で(a+1,b),(a-1,b),(a,b+1),(a,b-1)の4方向のいずれかへ進むことができるが、
y座標が奇数のときはx軸の正の方向へ移動することはできない。
y座標が偶数のときはx軸の負の方向へ移動することはできない。
y座標が奇数のときはy軸の正の方向へ移動することはできない。
y座標が偶数のときはy軸の負の方向へ移動することはできない。
ゴールへ辿り着くのに必要な移動回数の最小値を求めよ。
制約条件
-10^6≦x,y≦10^6
方針
x,yの正負で場合分けし、更にx,yの偶奇で場合わけする。
ソースコード
class Pathfinding { public: int getDirections(int x, int y) { if(x>=0&&y>=0)return x%2&&y%2?x+y+2:x+y; if(x>0)return x%2==0&&y%2?x-y+2:x-y; if(y>0)return x%2&&y%2==0?-x+y+2:-x+y; return x%2==0&&y%2==0?-x-y+4:-x-y+2; } };