【题解】P2262 [HNOI2004]FTP服务器

题目

P2262 [HNOI2004]FTP服务器

分析

  • 用户
    用户类型(userType):下载用户(downloadUser,不被允许上传)、上传用户(uploadUser,不被允许下载)、匿名用户(guest,不被允许上传、下载)。
    用户状态(userState):上传(upload)、下载(download)、浏览(scan)。
    用户当前所处的位置(userPosition):用户位于(浏览)哪个文件夹。

  • 文件夹
    文件名(fileName/folderName):文件夹的名字(字符串,不包含空格和回车)。
    文件大小(fileSize/folderSize,单位是byte):a文件夹的大小就是a所包含的全部 文件 的大小。
    当前状态(fileState/folderState):正常(normal,可以进行任何操作)、上传未完成(uploading,只允许进行浏览),其中如果一个文件夹中的文件/文件夹处于上传未完成状态,该文件夹就处于上传未完成状态。

  • FTP服务器
    访问用户的最大数量(maxUserNumber):达到数量上限后其他用户不能再访问服务器。
    服务器的最大流量(maxServerFlux):服务器流量的上限。
    单个用户允许的最大下载/上传流量(maxUserFluxx,我不知道他是多打了一个x还是就是这样):单个用户流量的上限。
    用户流量(userFlux):userFlux=min(presentMaxUserFlux,maxUserFlux)。
    单个用户最大流量(presentMaxUserFlux):presentMaxUserFlux=[maxUserFlux/userTotal]。
    活动用户(userTotal):该时刻正在进行上传/下载操作的用户的个数。

  • 命令(order)
    connect命令、quit命令、cd命令、cd..命令、download命令、upload命令。
    connect命令,格式:[name]+空格+connect+参数A,例如,tsinghua connect 1
    connect命令,含义:表示名叫name的用户请求以A的用户类型访问服务器,如果当前的用户数量没到达maxUserNumber,并且该用户未连接到服务器,则连接成功,服务器的反馈信息为success。否则反馈信息为unsuccess。连接成功后该用户的位置(userPosition)为服务器的根目录。A=1表示上传用户,A=2表示下载用户,A=3表示匿名用户。
    quit命令,格式:[name]+空格+quit,例如,tsinghua quit
    quit命令,含义:表示名叫name的用户断开与服务器的连接。如果用户未连接反馈unsuccess,否则反馈success。需要注意的是用户在任何状态下都可以断开连接。
    cd命令,格式:[name]+空格+cd+空格+[文件夹名字(floderName)],例如,THU cd FD
    cd命令,含义:表示名叫name的用户想进入所处文件夹中的一个叫floderName的文件夹。如果在该文件夹中存在一个叫floderName的文件夹,并且floderName处在normal的状态则改变name的位置(userPosition),反馈success。如果floderName不存在,或者不处于normal状态,反馈unsuccess
    cd..命令,格式:[name]+空格+cd..,例如,9# cd..
    cd..命令,含义:表示叫name的用户想要返回上一层文件夹,如果name处于根目录或者name没有连接到服务器反馈unsuccess。否则,反馈success并改变name的位置(userPosition)。
    download命令,格式:[name]+空格+download+空格+[name1],例如,A download 1.txt
    download命令,含义:表示名叫name的用户想要从当前文件夹下载名为name1的文件/文件夹。如果用户未连接或者name1不存在或者name1处于uploading状态,反馈unsuccess。否则,反馈success,并开始下载name1。(name下载的是执行命令时那一刻的文件夹,不能下载到在下载开始后新上传的文件夹)。
    upload命令,格式:[name]+空格+upload+空格+[name1]+空格+[size],例如,A upload B 1
    upload命令,含义:名叫name的用户想在当前文件夹上传一个叫name1的大小为size的文件/文件夹。当size=0时,文件夹,当size>0时,文件。如果用户未连接或者用户没有上传的权限或者用户未连接,反馈success,否则,反馈unsuccess(我盲猜,这里写错了),并且开始上传。需要注意的时,上传的文件夹只能是空文件。

思路

大模拟。

\(Code\)

posted @ 2020-01-18 14:23  yu__xuan  阅读(220)  评论(2编辑  收藏  举报