#P12896. [POI 2019/2020 R2] 四叉树 Drzewo czwórkowe

    ID: 12683 Type: RemoteJudge 1500ms 256MiB Tried: 0 Accepted: 0 Difficulty: (None) Uploaded By: Tags>2020POI(波兰)Special Judge

[POI 2019/2020 R2] 四叉树 Drzewo czwórkowe

题目背景

翻译来自于 LibreOJ

题目描述

题目译自 XXVII Olimpiada Informatyczna – II etap Drzewo czwórkowe

给定一个尺寸为 2m×2m2^{m} \times 2^{m} 的方形位图,每个像素要么是白色,要么是黑色。这样的位图可以用四叉树进行压缩表示。如果位图中的所有像素都是白色,四叉树只有一个节点,标记为 00;如果所有像素都是黑色,四叉树也只有一个节点,标记为 11;否则,四叉树的根节点标记为 44,并拥有四个子树,分别对应位图的四个象限(大小为 2m1×2m12^{m-1} \times 2^{m-1}),顺序为左上、右上、左下和右下。四叉树可以用一个由字符 014 组成的字符串来描述:树的描述从根节点的标记开始,后面依次是各个子树的描述。下图展示了一个 m=3m=3 的示例位图及其对应的四叉树,其描述字符串为 404004111014001410011

我们将黑色联通块定义为相互邻接的最大黑色像素集合(像素之间如果共享边则视为邻接)。对于给定的描述位图的字符串,计算位图中的黑色联通块数量以及最大黑色联通块的大小。在上述示例中,有两个黑色联通块,面积分别为 242455

正式来说,黑色联通块是指黑色像素的集合,其中任意两个像素可以通过一系列黑色像素连接起来,每两个连续的像素共享边。黑色联通块被称为最大黑色联通块,当且仅当无法通过添加任何其他黑色像素来扩大它,同时仍保持为黑色联通块。在本题中,我们只考虑最大黑色联通块。

输入格式

输入的第一行包含一个整数 mm (m0)(m \geq 0),表示位图的大小。第二行包含一个非空的字符串,由字符 014 组成,用于编码位图。输入保证是合法的,特别是四叉树的高度(即从根节点到最深处节点的路径上的边数)不超过 mm。位图中至少包含一个黑色像素。

输出格式

你的程序应输出两行内容:

第一行包含一个整数,表示位图中的黑色联通块数量。

第二行包含一个整数,表示最大黑色联通块的大小。由于这个数字可能非常大,需输出其对 109+710^{9}+7 取模的结果。

3
404004111014001410011
2
24

提示

附加样例

  1. 该样例满足 m=3m=3,位图的四个角各有一个 2×22 \times 2 的黑色方块,因此包含 44 个大小为 44 的黑色联通块;
  2. 该样例满足 m=9m=9,位图被涂成棋盘格样式,因此包含 (29)2/2=217\left(2^{9}\right)^{2} / 2 = 2^{17} 个大小为 11 的黑色联通块;
  3. 该样例满足 m=16m=16,位图全为黑色,因此包含 11 个大小为 (216)2=232\left(2^{16}\right)^{2} = 2^{32} 的黑色联通块。

详细子任务附加限制及分值如下表所示。

如果你的程序只正确输出了两行中的一行,可以获得该测试点 50%50\% 的分数。但在这种情况下,仍然需要输出两行,每行包含一个 00109+610^{9}+6 之间的整数。

子任务 附加限制 分值
11 m10m \leq 10 2424
22 m,n1000m, n \leq 1000 3636
33 m,n106m, n \leq 10^{6} 3232
44 m109,n106m \leq 10^{9}, n \leq 10^{6} 88