【题解】CF1742C题解

CF1742C 题解

思路分析

题目保证至少会染一条行或列,而且染的色会覆盖。

所以最后染色的行或列必定为全红或全蓝,不能有格子被覆盖。不然就绝对不是最后一次的染色,就一定有后来染色的行或列去覆盖它。

所以有一下两种判断方式:

  1. 判断某一行是否全部为红色。是,则最后一次用红色。否则,最后一次用蓝色。
  2. 判断某一列是否全部为蓝色。是,则最后一次用蓝色。否则,最后一次用红色。

任选一种进行判断即可。这里我们选用第 1 种方式。因为行遍历相对容易实现。

关键代码

void solve() 
{
    for(int i = 1;i <= 8;i++)
    {
        bool pd = (s[i][1] == 'R'); //先判断第一个,为后面的与运算做铺垫。
        for(int j = 2;j <= 8;j++)
        {
			pd = (pd && (s[i][j] == 'R'));
        }
        if(pd)
        {
            cout << "R" << endl;
            return; 
        }
    }
    cout << "B" << endl; //前面全部红色的已经返回了,执行到此绝对为蓝色。
    //(因为不可能不染色)
}
posted @ 2022-10-21 00:53  邻补角-SSA  阅读(11)  评论(0)    收藏  举报  来源