你说的对,但是《原鱼》是由狂狼电竞俱乐部自主研发的一款全新开放世界冒险游戏,考虑到游戏已经家喻户晓,所以在此省略两万字的游戏介绍。
正值春节版本,游戏中推出了一名新的翔元素双手键角色“胖头鱼战士”,该角色一共有三个技能:
友情提示:每个技能的冷却时间都是独立计算的,每秒钟所有技能的冷却时间都会减少 1 秒,冷却时间最少为 0 秒,当技能的冷却时间大于 0 秒时不能使用该技能。任意技能在使用过程中都不会被打断,每个技能在使用完毕后才能使用下一个技能。
胖头鱼作为狂狼电竞俱乐部的游戏策划,现在需要测试一下新角色的强度,但由于他很懒,所以他只会按照最简单的方式使用技能:可以使用技能时,优先使用怒气爆发,其次使用怒气战技,最后使用普通攻击。
初始时角色的怒气值为 0 ,怒气战技和怒气爆发的冷却时间也均为 0 ,没有增益效果也没有叠加普通攻击的段数。现在胖头鱼想知道,如果想要造成 s 点伤害,至少需要多少秒?为了历练新人,所以胖头鱼将任务分配给了新招的临时工,也就是你。
第一行包含两个整数 n 和 s ,表示普通攻击分为 n 段,总共需要造成 s 点伤害。
第二行包含五个整数 E 、 m 、 ta 、 da 和 ua ,表示怒气值达到 E 后才能使用怒气爆发,获得 m 次普通攻击的增益,花费 ta 秒时间,造成 da 点伤害,冷却时间变成 ua 秒。
第三行包含五个整数 w 、 eb 、tb 、 db 、ub ,表示怒气战技减少怒气爆发 w 秒冷却,获得 eb 点怒气值,花费 tb 秒时间,造成 db 点伤害,冷却时间变成 ub 秒。
接下来 n 行每行包含三个整数 ti 、 di 和 ei ,按顺序描述每一段普通攻击,花费 ti 秒时间,造成 di 点伤害,获得 ei 点怒气值。
输出一个整数,表示要造成 s 点伤害需要的最少时间。
2 22
1 0 1 1 1
3 0 3 4 7
2 3 0
1 2 0
16
2 26
6 2 1 1 10
3 3 1 2 5
2 3 4
1 2 5
13
【样例 1 解释】
由于所有技能获得的怒气值均为 0 ,所以一直无法使用怒气爆发。
首先使用怒气战技,花费 3 秒,造成 4 点伤害,该技能冷却时间变成 7 秒。
然后依次使用普通攻击第 1,2,1,2,1 段,共花费 8 秒,造成 13 点伤害。
此时怒气战技的冷却时间为 0 秒,再次释放怒气战技,花费 3 秒,造成 4 点伤害。
最后使用普通攻击第 1 段,花费 2 秒,造成 3 点伤害。
此时总伤害为 24 ,达到目标,共花费 16 秒。
【样例 2 解释】
首先使用怒气战技,花费 1 秒,造成 2 点伤害,获得 3 点怒气值,该技能冷却时间变成 5 秒。
然后使用普通攻击第 1 段,花费 2 秒,造成 3 点伤害,获得 4 点怒气值。
此时怒气值达到 7 ,使用怒气爆发,怒气值变成 0 ,花费 1 秒,造成 1 点伤害,获得 2 次普通攻击的增益,该技能冷却时间变成 10 秒。
然后使用增益普通攻击第 1 段,花费 2 秒,造成 6 点伤害,获得 4 点怒气值。
此时怒气战技的冷却时间为 0 秒,再次释放怒气战技,花费 1 秒,造成 2 点伤害,获得 3 点怒气值,并减少了怒气爆发 3 秒的冷却。
然后使用增益普通攻击第 1 段,普通攻击第 2,1 段,共花费 5 秒,造成 11 点伤害,获得 13 点怒气值。
此时怒气战技和怒气爆发的冷却时间均为 0 ,怒气值达到 20 ,优先使用怒气爆发,花费 1 秒,造成 1 点伤害。
此时总伤害为 26 ,达到目标,共花费 13 秒。
对于所有测试点,满足:
子任务及其特殊属性如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n , l , m , ta , da , ua , w , eb , tb , db , ub , cnt = 0 , t1 = 0 , t2 = 0 , p1 = 0 , p2 = 0 , t[110000] , d[110000] , e[110000] , s , tot = 0 , ans = 0;
int main() {
scanf("%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld" , &n , &s , &l , &m , &ta , &da , &ua , &w , &eb , &tb , &db , &ub);
for (ll i = 1 ; i <= n ; i ++)
scanf("%lld%lld%lld" , &t[i] , &d[i] , &e[i]);
while (ans < s) {
if (cnt >= l && t1 == 0)
tot += ta , ans += da , cnt = 0 , p1 = m , t1 = ua;
else if (t2 == 0){
tot += tb , ans += db , cnt += eb , t2 = ub;
if (t1 >= w) t1 -= w;
else t1 = 0;
}
else {
if (p1 > 0)
tot += t[p2] , ans += 2 * d[p2] , cnt += e[p2] , p1 --;
else
tot += t[p2] , ans += d[p2] , cnt += e[p2];
p2 ++;
if (p2 == n) p2 = 0;
}
t1 -- , t2 --;
}
printf("%lld" , tot);
return 0l;
}