可以在 云剪贴板 获得更好的体验。
定义
一个材料的「配方」包含:其名称(string),其需要材料总数(int),其需要的每个材料的名称(vector <string>),其需要的每个材料的数量(vector <int>)。
我们定义「0 级材料」是配方中需要材料总数为 0 的材料。它是最低级的材料,可直接获得,不需要使用配方合成。
操作
- 添加某材料的配方(若材料已经存在,则效果变为修改)
- 删除某材料的配方(若材料不存在,操作无效果)
- 统计某材料所需的 0 级材料
两种实现方式
第一种实现方式是将所有的配方存储到一个结构体数组里。
操作 1:进行查询,若存在则修改配方内容,否则在数组后面添加配方。
操作 2:进行查询,若存在则删除。
操作 3:查询材料配方 - 递归查询配方中需要的材料。可以记录材料的下标,无需每次都遍历寻找那些使用了多次的配方。
第二种实现方式是充分动用一下 mkdir 和 freopen。
操作 1:若同一级内无 recipe 文件夹,创建一个;在 recipe 文件夹里用 freopen 创建一个以其名字命名,不包含后缀的文件,写入配方;
操作 2:用 erase 删除文件;
操作 3:查询材料配方 - 递归查询配方中需要的材料。会不断的进行 freopen。
问题
- 这两种实现方式,各有什么利弊?哪个在时间上效率更高?
- 使用
freopen 创建大量非答案文件的文件并对其进行读写,在 CCF 的比赛中是否可以使用,会不会被禁赛?
请求解答,万分感谢。