「杂题乱刷」CF1221B
原题链接
题目简述
在一个 \(n \times n\) 的棋盘上放置黑马和白马,给出一个放置方式,使得黑马和白马之间的冲突数最多。
解题思路
这道题是一道贪心构造题,因为马每一步有 \(8\) 种移动方案,而我们假设将这个棋盘进行黑白交替染色,则会得到下图:
不难得出结论,如果马在黑色的格子上,则下一步必定会走到白色的格子上,如果马在白色的格子上,则下一步必定会走到黑色的格子上,所以,我们要将黑马放在同色的格子上,白马也要放在与黑马放置的格子的相反颜色的格子里,不难发现,我们设每个格子的横轴为 \(x\),纵轴为 \(y\),则如果(x+y)%2==0
,那么这个格子就为黑色的格子,否则这个格子就为白色的格子。
参考代码
#include<bits/stdc++.h>
using namespace std;
#define QwQ return 0
long long n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if((i+j)%2==0)//如果为黑色格子,就放黑色的马
cout<<"B";
else //否则放白色的马
cout<<"W";
}
cout<<endl;
}
QwQ;//华丽的结束
}