一个奇怪的有关存储配方的问题
  • 板块学术版
  • 楼主PRTS
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/9/14 10:03
  • 上次更新2023/10/27 11:40:36
查看原帖
一个奇怪的有关存储配方的问题
644019
PRTS楼主2022/9/14 10:03

可以在 云剪贴板 获得更好的体验。


定义

一个材料的「配方」包含:其名称(string),其需要材料总数(int),其需要的每个材料的名称(vector <string>),其需要的每个材料的数量(vector <int>)。

我们定义「0 级材料」是配方中需要材料总数为 00 的材料。它是最低级的材料,可直接获得,不需要使用配方合成。


操作

  1. 添加某材料的配方(若材料已经存在,则效果变为修改)
  2. 删除某材料的配方(若材料不存在,操作无效果)
  3. 统计某材料所需的 0 级材料

两种实现方式

第一种实现方式是将所有的配方存储到一个结构体数组里。
操作 1:进行查询,若存在则修改配方内容,否则在数组后面添加配方。
操作 2:进行查询,若存在则删除。
操作 3:查询材料配方 - 递归查询配方中需要的材料。可以记录材料的下标,无需每次都遍历寻找那些使用了多次的配方。

第二种实现方式是充分动用一下 mkdirfreopen
操作 1:若同一级内无 recipe 文件夹,创建一个;在 recipe 文件夹里用 freopen 创建一个以其名字命名,不包含后缀的文件,写入配方;
操作 2:用 erase 删除文件;
操作 3:查询材料配方 - 递归查询配方中需要的材料。会不断的进行 freopen


问题

  1. 这两种实现方式,各有什么利弊?哪个在时间上效率更高?
  2. 使用 freopen 创建大量非答案文件的文件并对其进行读写,在 CCF 的比赛中是否可以使用,会不会被禁赛?

请求解答,万分感谢。

2022/9/14 10:03
加载中...