自力で解き切れてよかったね。
https://yukicoder.me/problems/no/3484
問題
正整数R,C,B,Wが与えられ、2人でゲームを行う。
先手は、R*CのグリッドのうちB個黒マス、W個白マスで埋める。
その後、後手は白マスを3つ選び、うち2つをスタートとゴールとし、後1個を黒くする。
この時、スタートマスからゴールマスまで先手が隣接白マスをたどって移動できれば先手の勝ち、できなければ後手の勝ちである。
両者最適手を取るとき、勝者はどちらか。
解法
白マスが1マス飛び出た形状があると、そことその隣接マスをスタートと黒マスに指定され後手の勝ちとなる。
R≦Cとなるよう回転しておくと、後手が勝ちとなるのは以下のケースである。
- R=1の時。
- R=2かつWが奇数の時。
- Rが3以上かつWが7以下の奇数の時。
int T; int H,W; int A,B; void solve() { int i,j,k,l,r,x,y; string s; cin>>T; while(T--) { cin>>H>>W>>A>>B; if(H<W) swap(H,W); if(W==1) { cout<<"Bob"<<endl; continue; } if(W==2) { if(B%2==0) { cout<<"Alice"<<endl; } else { cout<<"Bob"<<endl; } continue; } if(B<=7&&B%2==1) { cout<<"Bob"<<endl; } else { cout<<"Alice"<<endl; } } }
まとめ
こういうの場合分けに漏れがありそうで怖いな。
今回は幸い一発ACでした。