CF1621A Stable Arrangement of Rooks

发布时间 2023-04-25 21:56:54作者: 酒巷清风&

题目简述:

一个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;
        }
    }
}