QOJ.ac

QOJ

時間限制: 3.0 s 記憶體限制: 256 MB 總分: 100

#18578. 学校信息学

统计

瓦西亚正在准备他的信息学高考,并在他的一本教科书中发现了以下题目:“图书馆里所有的书都采用相同的格式。一本书包含 400 页,每页包含 40 行,每行恰好有 80 个印刷字符。共有 25 种不同的字符:22 个字母、句号、逗号和空格。计算编码单本书内容所需的比特数。”

瓦西亚认为,该题目的作者假设所有字符都必须使用相同数量的比特进行编码。因此,要编码 25 种不同的字符,每个字符必须使用 5 个比特。但这样的编码方式意味着存储了不必要的冗余信息。

如果已知不同的字符及其组合在文本中出现的频率不同,那么使用变长编码(例如哈夫曼编码)将是有意义的。但作者并没有提供必要的信息,因此瓦西亚假设所有字符及其组合在文本中出现的频率均等,并使用固定长度的比特进行编码。

瓦西亚进一步思考,意识到如果对字符组(而不是单个字符)进行编码,可以部分消除这些无用信息。

例如,当对连续三个字符组成的字符组进行编码时,可能出现的组合数为 $25^3 = 15625$。那么 14 个比特就足够编码这些组合。这样,每个字符平均只需要 $4\frac{2}{3}$ 个比特,而不是作者所假设的 5 个比特。

瓦西亚想知道这是否是一种可以无限逼近 $\log_2 25 \approx 4.64385619$ 的方法。但随后他想到,这种编码是用于有限长度的消息的。如果消息的长度不能被所编码的字符组长度整除,消息将自动用空格填充,直到字符组的数量成为整数。此外,由于技术原因,无法使用过长的字符组。

瓦西亚决定编写一个程序,来确定在给定参数下编码消息时,字符组的最佳大小。请帮助瓦西亚编写这个程序。

输入格式

第一行包含一个整数 $T$ — 测试用例的数量($1 \le T \le 10^4$)。接下来是测试用例的描述,每个测试用例占一行。

对于每个测试用例,提供三个整数:$N$ — 消息字符集的大小,$L$ — 消息的字符长度,以及 $K$ — 允许的最大字符组大小($2 \le N \le 10^9$,$1 \le L \le 2 \cdot 10^6$,$1 \le K \le L$)。

对于每个测试用例,保证 $\log_2 N$ 要么是一个整数,要么与任何分母不超过 $K$ 的有理数之差的绝对值至少为 $10^{-13}$。

输出格式

对于每个测试用例,输出单独的一行,包含两个整数:$A$ — 编码后消息的最终长度(以比特为单位),以及 $B$ — 所使用的字符组大小($1 \le B \le K$)。

在字符组大小 $B$ 不大于 $K$(输入中定义)的前提下,编码后的消息长度 $A$ 必须尽可能短。如果有多个最优解,输出其中任意一个即可。

样例

输入样例 1

3
25 1280000 10
2 1000 1000
3 7 3

输出样例 1

5973338 3
1000 1000
14 1

样例解释

第一个测试用例对应瓦西亚教科书中的例子:消息长度为 $1\,280\,000$ 个字符,字符集包含 25 种字符。在这种情况下,如果字符组大小限制在 10 以内,使用大小为 3 的字符组可以使编码后的消息长度达到最小。由于填充,消息末尾会自动添加一个空格。如果像教科书作者最初设想的那样对每个字符单独编码,则需要 $6\,400\,000$ 比特的信息。

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.