Golden Week Contest 2015 C Snukeと対戦!
問題
方針
マスの数 $HW$ が偶数なら後攻を選び、相手が置いたのと対称の位置に逆の色を置いていく。 奇数の場合は先攻を選び、中心に置いてから場所は同じようにして同じ色を置いていく。 対称の位置には必ず置くことができるので終了ターンは必ず奇数番目のターンになり勝てる。
ゲームで DP でも Nim でもないときは対称性をうまく使うのが大事そう。
実装
int H,W;
int a,b,c;
void even(){
cout << "Second" << endl;
while (cin >> a >> b >> c && a!=-1) {
cout << H-a+1 << " " << W-b+1 << " " << 1-c << endl;
}
}
void odd(){
cout << "First" << endl;
cout << H / 2+1 << " " << W / 2+1 << " 1" << endl;
while (cin >> a >> b >> c && a!=-1) {
cout << H-a+1 << " " << W-b+1 << " " << c << endl;
}
}
signed main(){
cin >> H >> W;
if(H*W%2==0) even();
else odd();
}