#P14003. [eJOI 2025] Reactions
[eJOI 2025] Reactions
Description
Nicky 正在进行化学反应性的实验。他准备了 个实验,编号为 到 。现在他需要选择一个起始实验,然后他将执行所有编号不小于所选编号的实验。换言之,若他决定从编号为 的实验开始,他将按顺序进行实验 。
在开始进行起始实验之前,他有一容器溶液,其温度为 度。在第 个实验()中,他按如下顺序执行两步:
- 将溶液温度改变一个给定的整数温度值(可以升高、降低任意整数,或保持不变);
- 进行实验并检查是否发生反应。
已知在第 个实验中,温度会改变 度——若 则升高,若 则降低,若 则不变。并且,仅当当前温度(完成第 1 步后的温度)大于等于 时,第 个实验才会发生反应。注意,无论是否发生反应,第 1 步造成的温度变化都会保留并影响后续实验。
Nicky 希望发生反应的次数尽可能多,以便收集尽可能多的数据。请帮助他计算这一最大次数。
实现细节
你需要实现函数 reactions:
int reactions(int N, std::vector<int> D, std::vector<long long> T)
- :计划进行的实验数量;
- :长度为 的整数向量,其中 表示第 个实验的温度变化量;
- :长度为 的整数向量,其中 表示第 个实验发生反应所需的最低溶液温度。
该函数在每个测试中被调用一次。它需要返回在恰当选择起始实验的前提下,最多能发生的反应次数。
5
1 1 -3 1 1
1 3 5 1 2
2
5
1 -3 0 3 2
0 -2 -1 0 3
4
Hint
示例 1
考虑如下调用:
reactions(5, {1, 1, -3, 1, 1}, {1, 3, 5, 1, 2})
如果 Nicky 选择从编号为 的实验开始,溶液温度会变为 ,满足该次实验发生反应的条件。下一次实验温度升至 ,再次发生反应。由于不可能得到超过 次反应,函数应返回 。
示例 2
考虑如下调用:
reactions(5, {1, -3, 0, 3, 2}, {0, -2, -1, 0, 3})
函数应返回 ,因为若从编号为 的实验开始,Nicky 会在编号为 的实验中观测到反应。温度自 度起,在每次实验后的温度依次为:。
约束
子任务
| 子任务 | 分值 | 依赖子任务 | 附加约束 |
|---|---|---|---|
| 0 | - | 样例。 | |
| 1 | 15 | 0 | |
| 2 | 满足 的下标 至多有 个。 | ||
| 3 | 20 | - | 对每个 , |
| 4 | 0 | 答案至多为 。 | |
| 5 | 30 | 0–4 | 无附加约束。 |
翻译由 ChatGPT-5 完成。
京公网安备 11011102002149号