#P14626. [2018 KAIST RUN Fall] Fake Plastic Trees
[2018 KAIST RUN Fall] Fake Plastic Trees
Description
树 是一种递归结构,它要么是:
- 空树。空树表示为 ,大小为 。
- 非空树。非空树 表示为一对树 ,其中 称为 的 左子树, 称为 的 右子树。如果 ,则称这样的 为 叶子。叶子的大小为 ,非叶子树的大小为 ,其中 是 的大小, 是 的大小。
一棵非空树 是 虚假塑料树,当且仅当该树是 平衡的。形式化地说,设 。如果 或 成立,则 是虚假塑料树。
在计算机科学中,树通常被用作数据结构,并存储在内存中。最初,内存中没有树,只存在一个想象中的 空指针(对应空树 )。你可以通过将 和 设置为空指针或指向现有树的指针来在内存中分配一棵树。然后,内存通过将 添加到其结构中来扩展。注意,指针可以用小整数描述,减少了显式存储整棵树的需要。
形式化地说,内存 是一个归纳结构,最初只包含空树 ()。你可以通过以下操作扩展内存:,其中 。如果一棵树 在第 阶段被插入,则它具有 索引 。对于索引为 的树,它们的子树可以表示为范围在 内的一对整数。
你的任务是构造一个内存 ,满足以下条件:
- 中的每棵树要么是空树,要么是虚假塑料树。
- 中最多有 棵非空树。
- 存在一棵树 ,满足 。 是一个整数,作为输入给出。
Input Format
第一行包含一个整数 ,表示测试用例的数量()。
接下来的 行,每行给出一个整数 ,表示你的树应包含的叶子数量()。
Output Format
对于每个测试用例,你应该输出 行,其中 是 中非空树的数量()。
第一行输出一个整数 。
接下来的 行,每行输出两个以空格分隔的整数 ,表示索引为 的树的左子树和右子树的索引()。
第 行输出 ,表示包含 个节点的树的索引()。
保证在给定条件下总是存在答案。
4
1
2
3
4
1
-1 -1
0
3
-1 -1
-1 -1
0 1
2
3
-1 -1
0 0
1 0
2
5
-1 -1
0 0
0 0
2 1
1 2
3
Hint
:::align{center}

示例中 的输出图示。 :::
翻译由 DeepSeek V3 完成
京公网安备 11011102002149号