AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

P2580. 文件缓存系统

中等通过率 38% · 提交 280 · 通过 106
模拟哈希表系统设计

小慕正在设计一个文件缓存系统,该系统可以设定缓存的最大容量(单位为字节)。 该系统支持两种操作:存储文件(put)和读取文件(get)。操作命令格式为 put fileName fileSize 或 get fileName。 存储文件时,将文件放入缓存系统中;读取文件时,从缓存系统中访问已存在的文件,如果文件不存在,则不进行任何操作。 当不足以存放新文件时,系统会根据规则删除文件,直到剩余空间满足新文件的大小要求,然后再存放新文件。 具体的删除规则为:文件被访问后,会更新该文件的最近访问时间和总访问次数。当缓存空间不足时,优先按照访问次数从少到多的顺序删除文件,如果访问次数相同,则按照访问时间从旧到新的顺序删除文件。

提示:带虚线的词点一下有通俗解释。

输入描述

<p> 第一行为缓存最大值m(整数,取值范围为0 < m <= 52428800) </p> <p> 第二行为文件操作序列个数n(0 <= n <= 300000) </p> <p> 从第三行起为文件操作序列,每个序列单独一行 </p> <p> 文件操作定义为"op fileName fileSize" fileName是文件名,fileSize是文件大小 </p>

输出描述

<p> 输出当前文件缓存中的文件名列表,文件名用英文逗号分隔,按字典顺序排序 </p> <p> 如:a,c </p> <p> 如果文件缓存中没有文件,则输出NONE </p>

示例

示例 1

输入

50
6
put a 10
put b 20
get a
get a
get b
put c 30

输出

a,c

示例 2

输入

50
7
put a 10
put b 20
get a
get a
get b
get b
put c 30

输出

b,c

示例 3

输入

60
7
put a 10
put b 20
get a
get a
get b
put c 30
get c

输出

a,b,c

示例 4

输入

60
0

输出

NONE

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
文件缓存系统删除规则图解 缓存空间(最大容量 m 字节) 文件 a 访问次数:2 文件 b 访问次数:1 文件 c 访问次数:1 新文件 需要空间 删除规则(缓存不够时) 第一优先:访问次数少的先删 第二优先:访问次数相同时,最早访问的先删 示例:文件 b 和 c 访问次数都是1,若 b 更早访问,则先删 b 删到空间足够,再放入新文件
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「文件缓存系统」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。