这个题看上去本来不好处理,然而善意的题面已经基本告诉你做法了,小时候玩的那个游戏就是代码的核心。动动脑子想想,如果长和宽的积是奇数,那么一定要先手,如果是偶数,那么后手就会获胜。
好了,那么怎么处理对称情况呢,随便画一个小棋盘试一试,很容易得出是x-i+1和m-y+1。这之后就是颜色的问题了,因为题目有颜色的限制和对方耍赖这一操作,所以我们每一次放棋子的颜色也有要求。
再画一个小棋盘模拟一下,容易得出是偶数时要放不一样的,奇数时放一样的。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define re register
#define wc 0.0000000001
using namespace std;
int n,m,map[][],t,x,a[],y,c,cc;
int main()
{
cin>>n>>m;
memset(map,,sizeof(map));
if(n*m%==)
{
cout<<"First"<<endl<<n/+<<" "<<m/+<<" "<<<<endl;
map[n/+][m/+]=;
while(cin>>x>>y>>c)
{
if(c==)
cc=-;
else
cc=;
if(x+<=n&&map[x+][y]==cc||x->&&map[x-][y]==cc||y+<=m&&map[x][y+]==cc||y->&&map[x][y-]==cc)
{
cout<<"Buwanle";
return ;
}
map[x][y]=cc;
cout<<n-x+<<" "<<m-y+<<" "<<c<<endl;
map[n-x+][m-y+]=cc;
}
}else
{
cout<<"Second"<<endl;
while(cin>>x>>y>>c)
{
if(c==)
cc=-;
else
cc=;
if(x+<=n&&map[x+][y]==cc||x->&&map[x-][y]==cc||y+<=m&&map[x][y+]==cc||y->&&map[x][y-]==cc)
{
cout<<"Buwanle";
return ;
}
map[x][y]=cc;
cout<<n-x+<<" "<<m-y+<<" "<<(c^)<<endl;
map[n-x+][m-y+]=cc*(-);
}
}
}