#P12896. [POI 2019/2020 R2] 四叉树 Drzewo czwórkowe
[POI 2019/2020 R2] 四叉树 Drzewo czwórkowe
题目背景
翻译来自于 LibreOJ。
题目描述
题目译自 XXVII Olimpiada Informatyczna – II etap Drzewo czwórkowe
给定一个尺寸为 的方形位图,每个像素要么是白色,要么是黑色。这样的位图可以用四叉树进行压缩表示。如果位图中的所有像素都是白色,四叉树只有一个节点,标记为 ;如果所有像素都是黑色,四叉树也只有一个节点,标记为 ;否则,四叉树的根节点标记为 ,并拥有四个子树,分别对应位图的四个象限(大小为 ),顺序为左上、右上、左下和右下。四叉树可以用一个由字符 0
、1
和 4
组成的字符串来描述:树的描述从根节点的标记开始,后面依次是各个子树的描述。下图展示了一个 的示例位图及其对应的四叉树,其描述字符串为 404004111014001410011
。
我们将黑色联通块定义为相互邻接的最大黑色像素集合(像素之间如果共享边则视为邻接)。对于给定的描述位图的字符串,计算位图中的黑色联通块数量以及最大黑色联通块的大小。在上述示例中,有两个黑色联通块,面积分别为 和 。
正式来说,黑色联通块是指黑色像素的集合,其中任意两个像素可以通过一系列黑色像素连接起来,每两个连续的像素共享边。黑色联通块被称为最大黑色联通块,当且仅当无法通过添加任何其他黑色像素来扩大它,同时仍保持为黑色联通块。在本题中,我们只考虑最大黑色联通块。
输入格式
输入的第一行包含一个整数 ,表示位图的大小。第二行包含一个非空的字符串,由字符 0
、1
和 4
组成,用于编码位图。输入保证是合法的,特别是四叉树的高度(即从根节点到最深处节点的路径上的边数)不超过 。位图中至少包含一个黑色像素。
输出格式
你的程序应输出两行内容:
第一行包含一个整数,表示位图中的黑色联通块数量。
第二行包含一个整数,表示最大黑色联通块的大小。由于这个数字可能非常大,需输出其对 取模的结果。
3
404004111014001410011
2
24
提示
附加样例
- 该样例满足 ,位图的四个角各有一个 的黑色方块,因此包含 个大小为 的黑色联通块;
- 该样例满足 ,位图被涂成棋盘格样式,因此包含 个大小为 的黑色联通块;
- 该样例满足 ,位图全为黑色,因此包含 个大小为 的黑色联通块。
详细子任务附加限制及分值如下表所示。
如果你的程序只正确输出了两行中的一行,可以获得该测试点 的分数。但在这种情况下,仍然需要输出两行,每行包含一个 到 之间的整数。
子任务 | 附加限制 | 分值 |
---|---|---|