P2262 [HNOI2004] FTP服务器
题目背景
File Transfer Protocol,文件传输协议,简称 FTP。人们可以通过 FTP 实现资源共享。一般的情况下用户访问一个 FTP 服务器是通过类似资源管理器的形式对该服务器上的资源进行浏览,并且不同权限的用户可以实现下载文件/文件夹,上传文件/文件夹。
题目描述
一个FTP服务器的所有资源都以文件的形式按树形结构存储在不同的文件夹里,最低一级的是根目录(即根文件夹),根目录里有若干个文件和文件夹,每一个文件夹里都可以拥有 $0$ 个或多个文件及文件夹,同一文件夹里不存在名称相同的文件和文件夹。
一个用户包含三个属性:
- $\text{userType}$:用户类型;
- $\text{userState}$:用户状态(用户正在执行的操作);
- $\text{userPosition}$:用户当前所处的位置(即用户正在浏览的文件夹)。
用户分 $3$ 种类型:上传用户 $\text{uploadUser}$,下载用户 $\text{downloadUser}$,匿名用户 $\text{guest}$。
操作分 $3$ 种类型:浏览 $\text{scan}$,下载 $\text{download}$,上传 $\text{upload}$。
用户的权限是指用户允许进行的操作。不同类型的用户的权限是不同的。
每种用户的权限如下:
- 上传用户 $\text{uploadUser}$:浏览 $\text{scan}$,上传 $\text{upload}$。
- 下载用户 $\text{downloadUser}$:浏览 $\text{scan}$,下载 $\text{download}$。
- 匿名用户 $\text{guest}$:浏览 $\text{scan}$。
任何一个用户是不能进行其没有权限的操作的,例如:一个匿名用户想要下载一个文件或者文件夹是不允许的。
一个文件/文件夹包含三个属性:
- $\text{fileName/folderName}$:文件名(不包含空格和回车);
- $\text{fileSize/folderSize}$:文件大小
(单位 $\text{byte}$,$0
输入格式
一开始你将从文件中获得 FTP 的服务器的初始信息。第一行为 $3$ 个正整数,分别表示 $\text{maxUserNumber},\text{maxServerFlux},\text{maxUserFlux}$。接下来的若干行描述 $\text{server}$ 里已有文件资源的存储情况。
第一行总是描述的根目录中的一个文件或者文件夹。
如果某一行描述的是一个文件或者文件夹那么该行的数据为 $\verb!name + 空格 + size!$,如果 $\text{size}=0$ 表示这是一个文件夹,否则表示一个大小为 $\text{size}$ 的文件。
如果某一行描述的是一个文件夹,那么接下来的若干行描述的都是这个文件夹里的内容,直到一个与之对应的减号为止。这些数据都是递归描述的。因为一开始就是描述整个根目录里的文件和文件夹,所以文件信息的最后一行也为减号。(参看输入示例)。
下面的每一行为 $\verb!time + 空格 + order!$ 的形式给出,例如 $\verb!4 ares connect 1!$ 表示:在服务器开启后 $4$ 秒钟,名叫 $\verb!ares!$ 的用户请求以 $\text{uploadUser}$ 的身份连接到服务器上来。
输入的最后一行为一个字符串 $\verb!down!$。
所有输入命令的时刻 $\text{time}$ 都以命令出现的先后递增,同一时刻的命令以输入中出现的先后顺序确定其执行顺序。
输出格式
输出若干行,每行一个字符串 $\verb!success!$ 或 $\verb!unsuccess!$,表示每个操作成功与否。
说明/提示
来源:HNOI2004(经过修改)。