QOJ.ac

QOJ

حد الوقت: 3 s حد الذاكرة: 128 MB مجموع النقاط: 100

#11196. 二叉树压缩

الإحصائيات

题目描述

满二叉树由若干个节点组成。每个节点要么有两个子节点(左子节点和右子节点),要么没有任何子节点(此时称为叶子节点)。如果节点 $v$ 是节点 $u$ 的子节点,则称 $u$ 为 $v$ 的父节点。树的根节点是没有父节点的节点。在图中,根节点通常位于树的顶部。例如,下图展示了一棵拥有 15 个节点和 8 个叶子节点的满二叉树。

二叉树的子树是指任意节点及其所有后代(即子节点、子节点的子节点等)。如果两个子树没有任何公共节点,则称它们为不相交的。节点的深度定义为从根节点到该节点的路径上的节点数(不包括根节点)。例如,上图中的树,其叶子节点分别位于深度 3, 3, 3, 3, 2, 4, 4, 3。注意,已知各叶子节点的深度,我们可以唯一地还原出树的形状。

Bajtazar 是一名从事数据压缩的计算机科学家。他最近致力于使用二进制前缀码进行压缩,这种编码可以用满二叉树来表示。如果使用某种前缀码进行压缩,则描述该编码的树也必须包含在压缩文件中,因此描述越小越好。

Bajtazar 设计了一种压缩满二叉树的方法。他选择一定数量的互不相交的子树,其中每棵子树的叶子节点要么位于同一深度,要么位于相差为 1 的两个深度,并将这些子树替换为叶子节点。Bajtazar 以使得最终树的节点数最少的方式压缩树。例如,对上述树进行压缩后,得到了一棵只有 5 个节点的树:

从前缀码的效率角度来看,二叉树的具体形状并不重要,重要的是叶子节点在树中的深度。因此,如果两棵树具有相同的叶子深度多重集(即包含重复元素的集合),我们称这两棵树是等价的。例如,下面的满二叉树与之前的树具有相同的叶子深度:

压缩后得到了一棵只有 3 个节点的树:

Bajtazar 拥有一棵描述某种前缀码的满二叉树 $T$。他现在想构造一棵与之等价的树 $T'$,使得压缩 $T'$ 后得到的节点数最少。

输入格式

第一行包含一个整数 $n$ ($1 \le n$),表示满二叉树 $T$ 中的叶子节点数。 第二行包含 $n$ 个非负整数 $l_1, \dots, l_n$,由空格分隔,表示树中各叶子节点的深度(按从左到右的顺序)。

输出格式

你的程序应输出两行。第一行应包含一个整数,表示从与 $T$ 等价的某个满二叉树 $T'$ 压缩后得到的最小节点数。第二行应输出树 $T'$ 的叶子节点深度序列,按从左到右的顺序排列。如果存在多个正确答案,输出其中任意一个即可。

样例

样例输入 1

8
3 3 3 3 2 4 4 3

样例输出 1

3
2 3 3 3 3 3 4 4

子任务

测试集分为以下子任务。每个子任务的测试由一个或多个独立的测试组组成。

如果程序在第一行输出了正确结果,但在第二行输出了错误结果,则该测试点将获得 50% 的分数。但要求第二行必须输出输入中的叶子节点深度(顺序不限)。

子任务 条件 分数
1 $n \le 20$ 20
2 $n \le 2000$ 60
3 $n \le 500\,000$ 20

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.