「杂题乱刷」CF1221B

原题链接

CF1221B Knights

题目简述

在一个 \(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;//华丽的结束
}

posted @ 2023-11-23 20:22  wangmarui  阅读(8)  评论(0编辑  收藏  举报