QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 256 MB Total points: 100

#5318. 非常无聊的家庭作业

Statistics

Prof. Z 认为他的家庭作业对大多数学生来说都太难了(还记得“无聊的作业”这个任务吗?)。令他惊讶的是,许多学生提交了正确的答案。他认为原因实际上是他用来测试学生程序的数据集太小,而不是作业任务本身难度低。他决定再次给学生布置同样的作业,但这次使用了规模巨大的测试用例。当然,他的学生们觉得这次的作业变得更加无聊了。他们再次需要你的帮助。

对于那些不知道 Prof. Z 上次给学生布置了什么作业的人:

你需要绘制一棵二叉搜索树(BST)的图形。 二叉搜索树(有时也称为有序或排序二叉树)是一种基于节点的二叉树数据结构,具有以下性质: 节点的左子树仅包含键值小于该节点键值的节点。 节点的右子树仅包含键值大于该节点键值的节点。 左子树和右子树也必须是二叉搜索树。 ——摘自维基百科

给定一个整数键值列表,按顺序插入到 BST 中,我们可以形成一棵唯一的 BST。此外,Prof. Z 希望学生们画出这棵 BST 的图形。

绘制 BST 图形的规则如下: 1. 1 个节点的 BST 图形是一个单独的 'o'(第 15 个小写拉丁字母)。 2. 如果 BST 有非空子树,在子树根节点的正上方画一个 '|',并在之前画的 '|' 正上方画一个 '+'。最后,在 '+' 所在的行中,使用最少数量(包括 0)的 '-' 来连接 '+'(对应于左子树或右子树)和 'o'(表示子树的父节点)。 3. 左子树(如果存在)必须画在其父节点的左侧。同样,右子树(如果存在)必须画在其父节点的右侧。 4. BST 根节点所在的列不得包含属于左子树或右子树的任何字符。 5. 对于 BST 的每个节点,其左子树的图形和右子树的图形在整棵树的图中不共享公共列。

整棵 BST 绘制完成后,我们从上到下对行进行编号,从 1 开始计数;同样,从左到右对列进行编号,从 1 开始计数。

由于树的规模很大,图形会变得非常大,以至于 Prof. Z 这次无法检查图形的每一个细节。因此,你只需要向 Prof. Z 提交该图形的 $M$ 个片段,而不是整张图。

输入格式

第一行包含一个整数 $T$,表示测试用例的数量。接下来是 $T$ 个测试用例。 对于每个测试用例: 第一行包含一个正整数 $N$ ($N \le 100000$)。 第二行包含 $N$ 个不同的整数,每个整数都可以用 32 位有符号整数表示。这些数字应按给定顺序依次插入到一棵空的 BST 中。 第三行包含一个整数 $M$ ($M \le 5$)。 接下来 $M$ 行,每行包含四个整数,分别是所需图形片段的左上角行号和列号,以及片段的行数 $R_i$ 和列数 $C_i$。所有输入整数均为正整数,且符合 32 位有符号整数范围,但 $R_i$ 和 $C_i$ 除外,它们均大于 0 且小于等于 200。

输出格式

对于每个测试用例: 第一行输出案例编号,从 1 开始计数。 接着输出 $M$ 个块,每个块包含 $R_i$(或更少,见下文)行。每行应包含恰好 $C_i$ 个字符。使用空格(ASCII 32)填充空白。但如果某一行仅包含空格,则不应输出该行。 在每个图形片段后输出一个空行。

样例

输入 1

3
3
3 1 2
1
1 1 5 3
6 4 5 6 1 3 2
1
1 1 8 10
10
2 6 7 4 5 3 1 9 10 8
2
1 1 5 5
3 6 5 5

输出 1

Case #1:
+-o
| 
o+ 
| 
o 

Case #2:
+--o+ 
| | 
o-+ o+ 
 | | 
+o o 
| 
o 

Case #3:
+o---
| 
o +-
 | 
 +o+
o+ 
| 
o-+ 
 | 
 +o+

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.