#P12015. 目录查询

目录查询

题目背景

在计算机上查看文件系统的结构通常很有用,Microsoft Windows 的资源管理器就是一个典型的例子。在图形化操作系统出现之前,没有图形化的表示方法,一种较好的处理方法是把目录(也就是文件夹)和文件的结构显示成一个“图”的形式,并使用缩排来表示目录的结构。例如:

ROOT
|  dir1
|  |  dir2
|  |  |  dir3
|  |  |  |  x.docx
|  |  |  |  y.pptx
|  |  |  |  z.xlsx
|  |  |  kk.out
|  |  file1.in
|  |  file2.in
|  |  file3.in
|  dir4
|  dir5
|  |  file1.txt
|  file1.jpg
|  file2.mp4

这个“图”表示的结构如下:ROOT 目录(也就是根目录)包括 33 个子目录(dir1dir4dir5)和 22 个文件(file1.jpgfile2.mp4)。第一个子目录 dir1 包含 11 个子目录 dir233 个文件(file1.in file2.in file3.in ),第二个子目录 dir4 是空的,第三个子目录 dir5 包含一个文件(file1.txt)。

目录可以按照层级用路径的方式描述,例如 dir2 的路径可以描述为 ROOT/dir1/dir2dir3 的路径可以描述为 ROOT/dir1/dir2/dir3,根目录 ROOT 的路径可以描述为 ROOT

由此可知:目录 ROOT/dir1/dir2 包含 11 个子目录 dir311 个文件 kk.out, 目录 ROOT/dir1/dir2/dir3 包含 33 个文件 x.docxy.pptxz.xlsx

题目描述

你的任务是写一个程序读取 一组 表示一个目录结构测试数据,然后根据输入的多个目录路径,输出每个目录的目录结构的“图”。

输入格式

描述目录结构的测试数据以一行特殊的 * 结尾。

描述目录结构的测试数据包括一些文件和目录的名称(虽然在输入中没有给出,但是总假设 ROOT 目录是最外层的目录,也就是根目录)。

在输入中,以 ] 表示一个目录的内容结束(空目录亦如此)。目录名称不包含 .,文件名称包含 .

需要特别注意的是,每个文件名独占一行、每个目录名独占一行、特殊的符号 *] 也独占一行。

描述目录结构的测试数据结束后,接着有多行目录路径,每个路径独占一行。

输出格式

依次输出要查询的每个目录路径及其目录结构的“图”,目录结构图中的目录输出时仅输出名称不输出路径,目录结构的“图”与下一个要查询的目录路径中间用一个空行隔开。如果目录不存在,输出 [NOT EXIST],如果目录为空,输出 [EMPTY]

在显示一个目录中内容的时候,先显示其中的子目录(如果有子目录的话),然后再显示目录下的文件(如果有文件的话)。

同一个目录下的文件要求按照文件名称升序排序结果依次显示,同一个目录下的子目录也要求按照子目录名称升序排序结果依次显示

需要注意的是,使用一个 |22 个空格来表示缩排的层次。

输入输出样例

file2.in
file1.in
dir3
file2.xls
dir2
file1.jpg
file2.png
]
file1.docx
]
file4.txt
dir1
]
file3.mp4
*
ROOT/dir3
ROOT/dir3/dir2
ROOT/dir1
ROOT/dir4
ROOT
ROOT/dir3
|  dir2
|  |  file1.jpg
|  |  file2.png
|  file1.docx
|  file2.xls

ROOT/dir3/dir2
|  file1.jpg
|  file2.png

ROOT/dir1
[EMPTY]

ROOT/dir4
[NOT EXIST]

ROOT
|  dir1
|  dir3
|  |  dir2
|  |  |  file1.jpg
|  |  |  file2.png
|  |  file1.docx
|  |  file2.xls
|  file1.in
|  file2.in
|  file3.mp4
|  file4.txt

说明/提示

👀️ 对于100%100\% 的数据,文件和目录的名称中仅包含英文字符不包括空格,长度都不超过 3030。一个目录下的子目录个数和文件个数之和不超过 3030ROOT 根目录的目录结构”图“的行数不超过 10001000。保证同一目录下没有同名的子目录和同名的文件,文件和目录名区分大小写。