由于某些原因本题仅支持 C++, C++11 语言的提交。
Robert 正在设计一款新的电脑游戏。游戏中有一位英雄、
英雄一开始进入地牢
如果英雄的能力值大于等于敌人
的能力值 ,那么英雄会胜出。这使得英雄的能力值增加 ( )。这种情况下,下一步英雄将会进入地牢 ( )。否则英雄会战败,这使得英雄的能力值增加
( )。在这种情况下,下一步英雄将会进入地牢 。
注意
当英雄进入地牢
Robert 希望你通过
实现细节
你必须引用 keys.h
头文件。
你要实现以下函数:
void init(int n, int[] s, int[] p, int[] w, int[] l)
:敌人的数量。 、 、 、 :长度为 的序列。对于每一个 ( ): 是敌人 的能力值,也是击败敌人 后英雄增加的能力值。 是英雄被敌人 击败后增加的能力值。 是英雄击败敌人 后进入的下一个地牢的编号。 是英雄被敌人 击败后进入的下一个地牢的编号。
- 恰好调用此函数一次,且发生在任何对如下的
simulate
函数的调用之前。
int64 simulate(int x, int z)
:英雄的起始地牢编号。 :英雄的初始能力值。- 假设英雄的起始地牢编号为
,初始能力值为 ,函数的返回值是相应情况下游戏结束时英雄的能力值。 - 恰好调用此函数
次。
输入格式
评测程序示例以如下格式读取输入数据:
- 第
行: - 第
行: - 第
行: - 第
行: - 第
行: - 第
行( ): ,是第 次调用simulate
的参数。
输出格式
评测程序示例以如下格式打印你的答案:
- 第
行( ):第 次调用simulate
的返回值。
样例一
input
3 2 2 6 9 3 1 2 2 2 3 1 0 1 0 1 2 3
output
24 25
explanation
考虑以下调用:
init(3, [2, 6, 9], [3, 1, 2], [2, 2, 3], [1, 0, 1])
上图对应这次的 init
调用。每一个正方形都代表了一个地牢。对于所有存在敌人的地牢,
这时如果调用 simulate(0, 1)
,游戏会以如下方式进行:
地牢编号 | 英雄在战斗前的能力值 | 胜负结果 |
---|---|---|
战败 | ||
战败 | ||
胜出 | ||
战败 | ||
胜出 | ||
胜出 | ||
游戏结束 |
因此,simulate(0, 1)
的返回值应该是
这时如果调用 simulate(2, 3)
,游戏会以如下方式进行:
地牢编号 | 英雄在战斗前的能力值 | 胜负结果 |
---|---|---|
战败 | ||
战败 | ||
胜出 | ||
战败 | ||
胜出 | ||
胜出 | ||
游戏结束 |
因此,simulate(2, 3)
的返回值应该是
数据范围
对于所有数据:
(对于所有的 ) (对于所有的 ) (对于所有的 )
子任务 | 分值 | 特殊限制 |
---|---|---|
没有额外的约束条件 |
时间限制:
空间限制: