这题的关键是发现可以用“贪心 + 单调性”解决。
设当前数值为 v,一个操作器的运算结果记为 f(v),另一个操作器的运算结果记为 g(v)。
每一个阶段之后,后面的所有运算都是基于“当前数值”继续进行的。 如果后续最优结果函数记为 F(v),那么因为题目的四种运算:
小蓝正在做一个实验。最初,实验台上的能量球数值为 1。实验共进行 n 个阶段,每个阶段她必须从两个操作器中选择一个,对能量球施加一次变换。
操作器上刻有以下四种运算之一:
为了防止能量球过载或熄灭,每次运算后数值会被自动限制在 1 到 109 之间:若结果小于 1,自动调整为 1;若结果大于 109,自动调整为 109。
小蓝想知道,在所有可能的选择方案中,实验结束后能量球的数值最大可以达到多少。
约束条件:
第一行包含一个整数 n(1≤n≤2×105),表示阶段数量。 接下来 n 行,每行包含由空格分隔的四个部分:第一个操作符 op1、整数 x1、第二个操作符 op2、整数 x2。操作符为 '+', '-', '*', '/' 之一,操作数满足 1≤x1,x2≤109。
输出一个整数,表示在所有可能的选择下,最终能量球能达到的最大数值。
输入
2
+ 5 * 3
- 2 / 2
输出
4
说明
初始数值为 1。
第一阶段:若选择 +5,得到 1 + 5 = 6;若选择 ×3,得到 1 \times 3 = 3。贪心取较大值 6。
第二阶段:从 6 开始,若选择 -2,得到 6 - 2 = 4;若选择 ÷2,得到 6 \div 2 = 3。取较大值 4。
最终能量球最大值为 4。
输入
3
- 10 / 3
* 1000000000 + 1
- 1000000000 / 1000000000
输出
1
说明
初始数值为 1。
第一阶段:选择 -10 得到 -9,截断为 1;选择 ÷3 得到 0,截断为 1。当前值仍为 1。
第二阶段:选择 ×1000000000 得到 1000000000;选择 +1 得到 2。贪心取 1000000000。
第三阶段:从 1000000000 开始,选择 -1000000000 得到 0,截断为 1;选择 ÷1000000000 得到 1。两种选择均得到 1。
最终能量球最大值为 1。该样例展示了运算后的截断规则,即使中间达到上限 109,也可能被后续操作降至 1。
输入
1
* 500000000 + 999999999
输出
1000000000
说明
只有 1 个阶段。初始数值为 1。
选择 ×500000000 得到 1 \times 500000000 = 500000000;选择 +999999999 得到 1 + 999999999 = 1000000000。
取最大值 1000000000。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册