Aは凡ミスしたものの、B,Cはさっくり解いて最後Dで凡ミスをずっとやらかした。
https://www.hackerrank.com/contests/camypapercon03/challenges/zig-zag-step
問題
2次元座標に置いて原点から(X,Y)に移動したい。
プレイヤーは初期状態で上下左右任意の方向を向き、以下の行動を交互に繰り返し行う。(最初はどちらでもよい)
- 向いている方向に1進み、向きを時計回りに90度変える
- 向いている方向に1進み、向きを半時計回りに90度変える
(X,Y)に到達可能か答えよ。
解法
プレイヤーはy=xまたはy=-xの線に沿ってジグザグに動く。
最初どちらの手を取るかによって、y=x±1かy=-x±1のいずれかを通ることができるので、(X,Y)がここに乗るか判定すればよい。
int T; int X,Y; void solve() { int i,j,k,l,r,x,y; string s; cin>>T; while(T--) { cin>>X>>Y; if(abs(X-Y)<=1) _P("Possible\n"); else if(abs(-X-Y)<=1) _P("Possible\n"); else _P("Impossible\n"); } }
まとめ
最初間違えてy=x±1だけで判定してしまった。