kmjp's blog

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

yukicoder : No.3606 Ice Grid Game

なるほど…。
https://yukicoder.me/problems/no/3606

問題

H*Wのグリッドがあり、駒の初期位置が与えられる。
2人対戦のターン制のゲームで、それぞれのターンでは以下を行う。

  • 上下左右の隣接マスのうち、空きマスとなっている方向を選ぶ。1つも空きマスが無いと負け。
  • 駒は選んだ方向に、障害物またはグリッド外に衝突する手前のマスまで一気に移動する。その際、通過したマスは障害物が置かれる。

先手後手ともに最適手を取るとき、勝者はどちらか。

解法

後手必勝なのは以下の2パターンのみらしい。

  • (H,W)=(1,1)
  • (H,W)=(7,7)かつ駒の初期位置が中央
int T;
int H,W,R,C;

void solve() {
	int i,j,k,l,r,x,y; string s;
	
	cin>>T;
	while(T--) {
		cin>>H>>W>>R>>C;
		if(H==1&&W==1&&R==1&&C==1) {
			cout<<"Bob"<<endl;
		}
		else if(H==7&&W==7&&R==4&&C==4) {
			cout<<"Bob"<<endl;
		}
		else {
			cout<<"Alice"<<endl;
		}
		
	}
}

まとめ

これ本番中に証明まで含めて皆解けてるのかな…。