题目简述:
一个n*n的棋盘上,放上k个车,使得一任意车向上下左右移动一格(这里的车可以上下左右移动任意步数)后不与其他车相撞(注:不能走出棋盘之外)。
个人分析:
从题目可知,在车上下左右移动一格后不会与其他车相撞,换句话说,两辆车之间至少相隔一行一列,放在对角线上是最优想法,若无解则输出-1。提示:(n+1)/2<k则无解输出-1
AC代码:
void solved() //每个车都会移动一格,所以两车之间至少相隔一行一列
{
int n,k;
cin >> n >> k;
if((n+1)/2<k) cout << -1 << endl;
else
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
if(j&1 && i&1 && j==i && k){ cout << "R"; k--; }
else cout << ".";
}
cout << endl;
}
}
}
标签:CF1621A,Rooks,Arrangement,Stable,移动,上下左右
From: https://www.cnblogs.com/200312202218s/p/17353492.html