回分類題庫
z057: C. 測試資料系統
關鍵字: 2017 NPSC 國中組決賽

測資點 : 10 | Time Limit : 10000 ms | Memory Limit : 128000 KB
Accepted : 2 Times / 1 Users | Submit : 9 Times / 1 Users | Accepted rate : 100%
題目加入時間 : 2018-12-01 08:21

Content: 简体中文

你知道網際網路程式設計全國大賽(NPSC)嗎?沒錯,就是你正在比的這個比賽!

每年,NPSC的題目都是由若干位裁判分別負責出題而成的,其中,最重要也是最困難的 環節就是把所有裁判產生出的測試資料整合起來。每位裁判都有自己產生測試資料的習慣以及偏好,如果沒有好好協調,肯定是無法讓每位裁判產生的測試資料好好的儲存起來。

因此,爲了讓之後NPSC出題的過程能更順暢,現在想請你寫一支測試資料的管理系統!

這個系統在一開始,必須提供一個檔案目錄供所有裁判使用(/),裁判們可以在這個檔案 目錄底下,新增或刪除一個目錄、新增或刪除一個檔案,或是列出一個目錄所包含的資訊,嚴 格來說,必須有以下幾個功能:

• mkdir DIR:新增路徑爲DIR的目錄

• rmdir DIR:刪除路徑爲DIR的目錄

• ls DIR L :列出路徑爲DIR這個目錄下,最多L層的資訊。

• touch FILE:新增FILE這個檔案

• rm FILE:刪除FILE這個的檔案

其中,DIR/D1/D2/.../Dk的形式;而FILE/D1/D2/.../Dk/F的形式。

1. 對於mkdir必須滿足在最一開始所提供的目錄(/)底下有D1這個目錄,且/D1這個目 錄底下必須有D2這個目錄,以此類推。如果Dk已經存在、中途有任何一個目錄不存 在、Dk是一個檔案或是DIR恰爲/,便回報錯誤;否則,便建立Dk這個目錄。

2. 對於rmdir必須滿足在最一開始所提供的目錄(/)底下有D1這個目錄,且/D1這個目 錄底下必須有D2這個目錄,以此類推。如果Dk並不存在、中途有任何一個目錄不存 在、Dk是一個檔案、Dk這個目錄底下還有存在其他目錄或檔案、或是DIR恰爲/,便 回報錯誤;否則,便刪除Dk這個目錄。

3. 對於ls必須滿足在最一開始所提供的目錄(/)底下有D1這個目錄,且/D1這個目錄底 下必須有D2這個目錄,以此類推。如果Dk並不存在、中途有任何一個目錄不存在、或 是Dk是一個檔案便回報錯誤;否則,請輸出Dk這個目錄往下最多L層的資訊。如果第 L層當中有目錄,且該目錄底下還有其他目錄或檔案,請再目錄名稱後多輸出一個'+', 請以字典序的順序依序輸出該目錄下的目錄及檔案,如果該目錄底下還有目錄或檔案, 且還未達到L層,請先進入該目錄,並輸出其中的內容。舉例來說,如果/底下有一個目錄tmptmp底下有兩個目錄分別爲tmpdir1tmpdir2tmpdir1底下有一個檔 案爲tmpfile

 

指令

輸出

ls / 0

/+

ls / 1

/
/tmp/+

ls / 2

/
/tmp/
/tmp/tmpdir1/+
/tmp/tmpdir2/

ls / 3

/
/tmp/
/tmp/tmpdir1/
/tmp/tmpdir1/tmpfile
/tmp/tmpdir2/

4. 對於touch必須滿足在最一開始所提供的目錄(/)底下有D1這個目錄,且/D1這個目 錄底下必須有D2這個目錄,以此類推。如果Dk不存在、中途有任何一個目錄不存在、 Dk這個目錄底下已經存在F、或是FILE恰爲/,便回報錯誤;否則,便建立F這個檔 案。

5. 對於rm必須滿足在最一開始所提供的目錄(/)底下有D1這個目錄,且/D1這個目錄底 下必須有D2這個目錄,以此類推。如果Dk並不存在、中途有任何一個目錄不存在、F 是一個目錄、Dk這個目錄底下不存在F這個檔案、或是FILE恰爲/,便回報錯誤;否 則,便刪除F這個檔案。

Input:

測試資料第一行包含一個整數N,代表總共輸入的指令數。接下來N 行,分別包含以下 其中一種形式:
• mkdir DIR :新增路徑爲DIR的目錄
• rmdir DIR :刪除路徑爲DIR的目錄
• ls DIR L  :列出路徑爲DIR這個目錄下,最多L層的資訊。
• touch FILE :新增FILE這個檔案
• rm FILE :刪除FILE這個的檔案
• 1 ≤ N ≤ 500
• 1 ≤|DIR|,|FILE|≤ 100
• 1 ≤ L ≤ 100 
• DIR滿足題目敘述中的格式
• FILE滿足題目敘述中的格式
• Di,F僅包含大小寫英文字數字(a-zA-Z0-9)及點('.')
• |Di|,|F|≥1

Output:

對於每個指令如果產生錯誤,請輸出"ERROR"於一行(不包含引號)。對於每個正確執行的 ls DIR L指令,輸出相對應的內容。

Sample Input:help

若題目沒有特別說明,則應該以多測資的方式讀取,若不知如何讀取請參考 a001 的範例程式。
例1:
8 
mkdir /tmp 
mkdir /tmp/tmpdir1 
mkdir /tmp/tmpdir2 
touch /tmp/tmpdir1/tmpfile 
ls / 0 
ls / 1 
ls / 2 
ls / 3

例2:
18 
touch /c 
mkdir / 
mkdir /a/b 
mkdir /a 
touch /a/b 
mkdir /a 
mkdir /c 
rmdir /c/d 
rmdir /c 
rmdir /a 
mkdir /a/e 
touch /a/e 
rm /a/e 
rm /a/b 
ls / 0 
ls / 1 
ls / 2 
ls / 3

Sample Output :

/+
/ 
/tmp/+ 
/ 
/tmp/ 
/tmp/tmpdir1/+ 
/tmp/tmpdir2/ 
/ 
/tmp/ 
/tmp/tmpdir1/
/tmp/tmpdir1/tmpfile 
/tmp/tmpdir2/

例2:
ERROR
ERROR 
ERROR 
ERROR 
ERROR 
ERROR 
ERROR 
ERROR 
ERROR 
/+ 
/ 
/a/+ 
/c 
/ 
/a/ 
/a/e/ 
/c 
/ 
/a/ 
/a/e/ 
/c

Hint :

Author :

2017 NPSC 國中組決賽 (管理員:Chang)

  Solve it!   Status Forum