QOJ.ac

QOJ

Time Limit: 2 s Memory Limit: 512 MB Total points: 100 Difficulty: [show]

#3065. 隐藏的层级

Statistics

你正在为一个简单的文本文件浏览器设计用户界面。你的任务之一是构建一个显示目录层次结构的导航面板。通常,文件系统由目录组成,目录中可能包含文件和其他目录,而这些目录又可能包含更多的文件和目录,依此类推。因此,目录形成了一个层次化的树状结构。层次结构中最顶层的目录称为根目录。如果目录 $d$ 直接包含目录 $e$,我们称 $d$ 是 $e$ 的父目录,而 $e$ 是 $d$ 的子目录。每个文件都有一个以字节为单位的大小。目录的大小即为该目录下直接或间接包含的所有文件的总大小。

除了根目录外,所有文件和目录都有一个名称——一个总是以字母开头,且仅由小写字母和“.”(点)字符组成的字符串。所有直接位于同一个父目录下的项(文件和目录)必须具有唯一的名称。每个项(文件和目录)都可以通过其路径进行唯一描述——路径是根据以下规则构建的字符串:

  • 根目录的路径仅为“/”(正斜杠)。
  • 对于目录 $d$,其路径是通过从根目录到 $d$ 沿层次结构自上而下连接目录名称,在每个名称前加上“/”字符,并在路径末尾再放置一个“/”字符而获得的。
  • 对于文件 $f$,其路径是父目录路径与文件 $f$ 名称的连接。

我们通过打印根目录来显示目录层次结构。我们通过输出一行格式为“$m_d\ p_d\ s_d$”的内容来打印目录 $d$,其中 $p_d$ 和 $s_d$ 分别是目录 $d$ 的路径和大小,$m_d$ 是稍后解释的展开标记。如果 $d$ 包含其他目录,我们必须选择将其折叠或展开。如果我们选择展开 $d$,我们将按名称的字典序打印其所有子目录(使用相同的规则)。如果我们选择折叠目录 $d$,我们只需忽略其内容。

展开标记 $m_d$ 是一个单个空格字符(当 $d$ 没有子目录时)、“+”(加号)字符(当我们选择折叠 $d$ 时)或“-”(减号)字符(当我们选择展开 $d$ 时)。

给定文件系统中的文件列表和一个阈值整数 $t$,请显示目录层次结构,确保打印出每个大小至少为 $t$ 的目录。此外,打印的目录总数应尽可能少。假设文件系统中没有空目录——整个层次结构可以从提供的文件路径中推导出来。注意,根目录无论其大小如何都必须打印。还要注意,大小至少为 $t$ 的目录只需要被打印,但不一定需要被展开。

输入格式

第一行包含一个整数 $n$ ($1 \le n \le 1000$),表示文件的数量。接下来的 $n$ 行,每行包含一个字符串 $f$ 和一个整数 $s$ ($1 \le s \le 10^6$),分别表示单个文件的路径和大小。每个路径最多 100 个字符长,并且是根据上述规则的有效文件路径。所有路径各不相同。

最后一行包含一个整数 $t$ ($1 \le t \le 10^9$),表示目录大小的阈值。

输出格式

输出给定阈值下文件系统层次结构的最小显示方式,如上所述。

样例

样例输入 1

9
/sys/kernel/notes 100
/cerc/problems/a/testdata/in 1000000
/cerc/problems/a/testdata/out 8
/cerc/problems/a/luka.cc 500
/cerc/problems/a/zuza.cc 5000
/cerc/problems/b/testdata/in 15
/cerc/problems/b/testdata/out 4
/cerc/problems/b/kale.cc 100
/cerc/documents/rules.pdf 4000
10000

样例输出 1

- / 1009727
- /cerc/ 1009627
/cerc/documents/ 4000
- /cerc/problems/ 1005627
- /cerc/problems/a/ 1005508
/cerc/problems/a/testdata/ 1000008
+ /cerc/problems/b/ 119
+ /sys/ 100

样例输入 2

8
/b/test/in.a 100
/b/test/in.b 1
/c/test/in.a 100
/c/test/in.b 1
/c/test/pic/in.a.svg 10
/c/test/pic/in.b.svg 10
/a/test/in.a 99
/a/test/in.b 1
101

样例输出 2

- / 322
+ /a/ 100
- /b/ 101
/b/test/ 101
- /c/ 121
+ /c/test/ 121

样例输入 3

2
/a/a/a 100
/b.txt 99
200

样例输出 3

+ / 199

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

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.