U705696 Tibo 又刷新 Codex 额度了

题目背景

自从 Codex 推出了新的额度策略后,hekuo 便开始一边开发项目,一边和额度斗智斗勇。 旧版账号同时受到 5 小时额度 与 周额度 的限制;而新版账号则取消了 5 小时额度,仅保留周额度。 更离谱的是,OpenAI 员工 Tibo 经常会突然给部分用户刷新周额度,因此社区里流传着一句话: > Tibo 又刷新 Codex 额度了。 与此同时,部分 K12 账号始终停留在旧版规则,从头到尾都不会切换到新版。 为了按时完成项目,hekuo 可以等待 Tibo 的官方刷新,也可以主动使用重置卡恢复周额度。但如果额度不足,项目就会被迫中断,而每一次新的中断都会让项目变得更加难以完成。 现在,请你帮助 hekuo 合理规划重置卡的使用方案,在规定时间内完成所有项目。

题目描述

时间以小时为单位,共有 T 个小时,编号为 0 ~ T−1。 共有 n 个项目,第 i 个项目具有三个属性: 启动时刻 s_i 初始工作量 a_i 每小时最大处理量 r_i 从 s_i 开始,只要项目尚未完成,它就会尝试运行。 若项目能够运行,则每小时最多完成 r_i 单位工作量;如果剩余工作量不足 r_i,则仅完成剩余部分。 每完成 1 单位工作量,就会消耗 1 点 Codex 额度。 多个项目可以同时运行,因此一个小时内的额度消耗等于所有正在运行项目消耗之和。 旧版额度规则 账号初始采用旧版额度规则,同时受到两种限制: 任意连续 5 个小时内消耗的额度总和不能超过 H; 自最近一次周额度刷新以来,累计消耗的额度不能超过 W。 只要任意一项限制被突破,本小时所有准备运行的项目都会无法运行。 新版额度规则 系统可能会在某一个时刻执行一次 SWITCH 指令。 执行后: 永久取消 5 小时额度限制; 仅保留周额度限制; 已经消耗的周额度不会恢复; 正在运行的项目不会停止。 如果输入中不存在 SWITCH,则表示这是一个 K12 账号,整个过程中始终采用旧版额度规则。 ### 官方刷新与重置卡 Tibo 会在若干给定时刻进行官方刷新。 官方刷新会立即: - 将当前周额度使用量清零; - 恢复完整周额度 `W`; - 清除最近 5 小时内的额度消耗记录,使 5 小时额度恢复。 除此之外,hekuo 拥有 `k` 张重置卡。 第 `i` 张重置卡具有: - 获得时间 `c_i`; - 过期时间 `e_i`。 只有满足:`c_i ≤ 当前时间 ≤ e_i` 时,该重置卡才能被使用。 每张重置卡最多使用一次。 使用一张重置卡后,会立即: - 将当前周额度使用量清零; - 恢复完整周额度 `W`; - 清除最近 5 小时内的额度消耗记录,使 5 小时额度恢复。 如果一张重置卡在过期前没有使用,则该卡失效。 hekuo 需要合理安排重置卡的使用时间,使所有项目能够按时完成。 ### 每小时执行顺序 对于每一个小时,按照如下顺序执行: 1. 如果本小时存在官方刷新,则恢复周额度; 2. 如果本小时存在 `SWITCH`,则立即切换到新版规则; 3. hekuo 可以选择是否使用一张重置卡,同时恢复周额度和 5 小时额度; 4. 判断所有项目是否能够同时运行; 5. 若能够运行,则扣除额度并完成对应工作量; 6. 若不能运行,则所有准备运行的项目进入或保持中断状态。 同一个小时最多使用一张重置卡。

输入格式

第一行包含六个整数: ``` n H W T m k ``` 其中: - `n` 表示项目数量; - `H` 表示 5 小时额度上限; - `W` 表示周额度上限; - `T` 表示总运行时间; - `m` 表示官方刷新次数; - `k` 表示重置卡数量。 --- 接下来 `n` 行,每行包含三个整数: ``` s_i a_i r_i ``` 表示第 `i` 个项目: - `s_i`:启动时间; - `a_i`:初始工作量; - `r_i`:每小时最大处理量。 --- 接下来一行包含 `m` 个整数: ``` f_1 f_2 ... f_m ``` 表示官方刷新时刻。 --- 接下来 `k` 行,每行包含两个整数: ``` c_i e_i ``` 表示第 `i` 张重置卡: - `c_i`:该卡可开始使用的时间; - `e_i`:该卡过期时间。 若当前时间不满足: ``` c_i ≤ t ≤ e_i ``` 则该卡不能使用。 --- 最后一行包含一个整数: ``` q ``` 表示 `SWITCH` 指令时间。 - `q = -1` 表示不存在 `SWITCH`; - 否则表示第 `q` 小时执行 `SWITCH`。

输出格式

输出一个整数: - 表示完成所有项目所需要使用的最少重置卡数量。 如果无论如何都无法完成所有项目,输出: ``` -1 ```

说明/提示

* 官方刷新只恢复周额度,不会清除 5 小时额度记录。 * 重置卡会恢复周额度,并清除全部 5 小时额度记录。 * `SWITCH` 本身不会恢复任何额度。 * 切换到新版规则后,不再计算 5 小时额度。 * 在同一个小时使用重置卡后,项目可以立即使用恢复后的额度运行。 ### 样例1说明 hekuo 有两个项目: * 项目 1: * 第 0 小时启动; * 初始工作量为 20; * 每小时最多处理 5。 * 项目 2: * 第 0 小时启动; * 初始工作量为 10; * 每小时最多处理 5。 账号初始采用旧版额度规则: * 5 小时额度上限为 15; * 周额度上限为 30。 第 0 小时: 两个项目同时运行: * 项目 1 消耗 5 点额度; * 项目 2 消耗 5 点额度。 共消耗 10 点额度。 第 1 小时: 两个项目继续运行,需要再次消耗 10 点额度。 此时最近 5 小时累计消耗: ``` 10 + 10 = 20 ``` 超过 5 小时额度上限 15。 因此两个项目进入中断状态。 hekuo 有两张重置卡: * 第 1 张可在第 1 至第 3 小时使用; * 第 2 张可在第 5 至第 7 小时使用。 如果等待第 4 小时的官方刷新,虽然额度会恢复,但剩余时间不足以保证所有项目完成。 因此 hekuo 应该在第 1 小时使用第 1 张重置卡: * 周额度恢复; * 5 小时额度恢复; * 两个项目继续运行。 最终只需要使用 1 张重置卡即可完成所有项目。 因此答案为: ``` 1 ```