kmjp's blog

競技プログラミング参加記です

Saiko~ No Contesuto #03 : Zig-Zag Step

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だけで判定してしまった。