CF1710A题解
长文前往 blog 获得更好的阅读体验 & 原题链接
2023/6/14:修改部分内容。
先给下结论:
- 每种颜色必须涂满连续的两行或两列
- 根据上面的结论进一步推导出所有颜色只能竖着或横着。
证明:
-
约定:
-
文章中
(x,y) x 指行号,y 指列号。 -
文章中,设
(i,j) 的颜色为color_{i,j} :
-
XX 颜色块的左上指所有符合条件的
(i,j) 其中color_{i-1,j}\not=color_{i,j},color_{i,j-1}\not=color_{i,j} 。 -
XX 颜色块的右上指所有符合条件的
(i,j) 其中color_{i-1,j}\not=color_{i,j},color_{i,j+1}\not=color_{i,j} 。 -
XX 颜色块的左下指所有符合条件的
(i,j) 其中color_{i+1,j}\not=color_{i,j},color_{i,j-1}\not=color_{i,j} 。 -
XX 颜色块的右上指所有符合条件的
(i,j) 其中color_{i+1,j}\not=color_{i,j},color_{i,j+1}\not=color_{i,j} 。 -
XX 颜色块的(左上/左下/右上/右下)还要求
color_{i,j}=该颜色 。 -
- 注意:一个颜色块的(左上/左下/右上/右下)可能不止一个。
-
我们假定有两种及以上的颜色。
- 如果只涂一列:
那么显而易见每种方块只有上下两个方块与之相邻。不满足题目要求。
- 如果所涂的列都涂满了且涂了两列及以上(其中
n=8,m=5 ): - (注意其中黄色部分只是代表除蓝色以外其他颜色,不代表单一颜色):
对于不处于边缘地区的方块,一定有上下左右四个同颜色的方块,也就是,不在边缘地区的方块不会影响答案。
对于在边缘地区不在 蓝色颜色块的左上左下右上右下 的方块,一定有除了面对黄色的方向外其他三个方向有同颜色的方格。
对于在蓝色颜色块的左上左下右上右下的块,根据题目的定义,
- 如果没涂满任何一列或一行且涂两列及以上:
显而易见在蓝色颜色块的左上左下右上右下都只有
蓝色颜色块的左下最多只有上和右两个相同颜色方块相邻。因为如果左有了相同颜色的方块,那么就不符合左下的定义。左下如果下有了同颜色的方块也不符合定义。其他 左下右上右下 区域同理。
但特别考虑
但是对于这种情况我们发现
对于行的证明,只需要把图翻转过来即可。
但特别的,对于这种奇奇怪怪的形状:
还有
注意到结合开头的约定,第一张图有不止一个的左上左下右上右下。如左下可能在
在蓝色与黄色的交界处,一定存在一格颜色,且这格只有两格相同颜色相邻。上文已经对此种情况所出现的左上左下右上右下格进行证明。但如下图所示,对于蓝色可能左上左下右上右下均符合要求,但观察黄色区域,考虑黄色区域最优情况,即全部都是同一种颜色,结合前面证明,发现黄色区域并不符合要求。
证毕。
实现
前排提示:本份题解的复杂度是
结合上面的结论。
第
我们分别把
我们先选取一个大根堆,不停的取里面的元素。
取到第
如是,判断
如果 yes。
然后再选取另外一个大根堆也同样进行以上操作。
判断下来一个 yes 都没输出,那么就是 no 了(这不是废话吗)
为什么要大根堆?
因为这样我们可以在
代码