站外试题,求助
  • 板块题目总版
  • 楼主a1b2c1
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/2/7 17:06
  • 上次更新2025/2/7 19:57:28
查看原帖
站外试题,求助
1519093
a1b2c1楼主2025/2/7 17:06

【ptyb2024】胖头鱼战士

题目描述

你说的对,但是《原鱼》是由狂狼电竞俱乐部自主研发的一款全新开放世界冒险游戏,考虑到游戏已经家喻户晓,所以在此省略两万字的游戏介绍。

正值春节版本,游戏中推出了一名新的翔元素双手键角色“胖头鱼战士”,该角色一共有三个技能:

  1. 普通攻击【翔龙在天】:一共分为 nn 段,使用第 ii 段普通攻击会花费 tit_i 秒的时间,造成 did_i 点伤害,并让角色获得 eie_i 点怒气值。只有连续使用普通攻击时才会叠加段数,第 nn 段普通攻击结束后或者使用了其他技能后再使用普通攻击,都会从第 11 段开始重新计算。
  2. 怒气爆发【翔空万里】:当怒气值达到 EE 时才能使用,使用后怒气值将变为 00 。使用怒气爆发会花费 tat_a 秒的时间,造成 dad_a 点伤害,并让角色获得增益效果之后的 mm 次普通攻击造成的伤害翻倍。如果在增益效果结束前再次使用怒气爆发,会清除之前的增益效果并重新获得增益效果。怒气爆发使用完毕后该技能的冷却时间将变成 uau_a 秒。
  3. 怒气战技【龙翔虎跃】:使用怒气战技会花费 tbt_b 秒的时间,造成 dbd_b 点伤害,让角色获得 ebe_b 点怒气值并减少怒气爆发 ww 秒的冷却时间。怒气战技使用完毕后该技能的冷却时间将变成 ubu_b 秒。

友情提示:每个技能的冷却时间都是独立计算的,每秒钟所有技能的冷却时间都会减少 11 秒,冷却时间最少为 00 秒,当技能的冷却时间大于 00 秒时不能使用该技能。任意技能在使用过程中都不会被打断,每个技能在使用完毕后才能使用下一个技能。

胖头鱼作为狂狼电竞俱乐部的游戏策划,现在需要测试一下新角色的强度,但由于他很懒,所以他只会按照最简单的方式使用技能:可以使用技能时,优先使用怒气爆发,其次使用怒气战技,最后使用普通攻击。

初始时角色的怒气值为 00 ,怒气战技和怒气爆发的冷却时间也均为 00 ,没有增益效果也没有叠加普通攻击的段数。现在胖头鱼想知道,如果想要造成 ss 点伤害,至少需要多少秒?为了历练新人,所以胖头鱼将任务分配给了新招的临时工,也就是你。

输入格式

第一行包含两个整数 nnss ,表示普通攻击分为 nn 段,总共需要造成 ss 点伤害。

第二行包含五个整数 EEmmtat_adad_auau_a ,表示怒气值达到 EE 后才能使用怒气爆发,获得 mm 次普通攻击的增益,花费 tat_a 秒时间,造成 dad_a 点伤害,冷却时间变成 uau_a 秒。

第三行包含五个整数 wwebe_btbt_bdbd_bubu_b ,表示怒气战技减少怒气爆发 ww 秒冷却,获得 ebe_b 点怒气值,花费 tbt_b 秒时间,造成 dbd_b 点伤害,冷却时间变成 ubu_b 秒。

接下来 nn 行每行包含三个整数 tit_idid_ieie_i ,按顺序描述每一段普通攻击,花费 tit_i 秒时间,造成 did_i 点伤害,获得 eie_i 点怒气值。

输出格式

输出一个整数,表示要造成 ss 点伤害需要的最少时间。

样例 #1

样例输入 #1

2 22
1 0 1 1 1
3 0 3 4 7
2 3 0
1 2 0

样例输出 #1

16

样例 #2

样例输入 #2

2 26
6 2 1 1 10
3 3 1 2 5
2 3 4
1 2 5

样例输出 #2

13

提示

【样例 1 解释】

由于所有技能获得的怒气值均为 00 ,所以一直无法使用怒气爆发。

首先使用怒气战技,花费 33 秒,造成 44 点伤害,该技能冷却时间变成 77 秒。

然后依次使用普通攻击第 1,2,1,2,11, 2, 1, 2, 1 段,共花费 88 秒,造成 1313 点伤害。

此时怒气战技的冷却时间为 00 秒,再次释放怒气战技,花费 33 秒,造成 44 点伤害。

最后使用普通攻击第 11 段,花费 22 秒,造成 33 点伤害。

此时总伤害为 2424 ,达到目标,共花费 1616 秒。

【样例 2 解释】

首先使用怒气战技,花费 11 秒,造成 22 点伤害,获得 33 点怒气值,该技能冷却时间变成 55 秒。

然后使用普通攻击第 11 段,花费 22 秒,造成 33 点伤害,获得 44 点怒气值。

此时怒气值达到 77 ,使用怒气爆发,怒气值变成 00 ,花费 11 秒,造成 11 点伤害,获得 22 次普通攻击的增益,该技能冷却时间变成 1010 秒。

然后使用增益普通攻击第 11 段,花费 22 秒,造成 66 点伤害,获得 44 点怒气值。

此时怒气战技的冷却时间为 00 秒,再次释放怒气战技,花费 11 秒,造成 22 点伤害,获得 33 点怒气值,并减少了怒气爆发 33 秒的冷却。

然后使用增益普通攻击第 11 段,普通攻击第 2,12, 1 段,共花费 55 秒,造成 1111 点伤害,获得 1313 点怒气值。

此时怒气战技和怒气爆发的冷却时间均为 00 ,怒气值达到 2020 ,优先使用怒气爆发,花费 11 秒,造成 11 点伤害。

此时总伤害为 2626 ,达到目标,共花费 1313 秒。

数据说明

对于所有测试点,满足:

  • 关于普通攻击段数、增益效果与伤害总量: 1n51 ≤ n ≤ 50m100 ≤ m ≤ 101s10181 ≤ s ≤ 10^{18}
  • 关于技能的耗时、伤害与怒气: 1ta,tb,ti,da,db,di31 ≤ t_a, t_b, t_i, d_a, d_b, d_i ≤ 30ei,eb,w30 ≤ e_i, e_b, w ≤ 3
  • 关于技能的冷却时间与怒气条件: 0ua300 ≤ u_a ≤ 300ub150 ≤ u_b ≤ 151E801 ≤ E ≤ 80

子任务及其特殊属性如下:

  • 子任务 1110%10\% 的分数,满足 ub=eb=0u_b = e_b = 0 ,表示怒气战技的冷却与获得怒气均为 00
  • 子任务 2220%20\% 的分数,满足 ei=eb=0e_i = e_b = 0ti=ta=tb=1t_i = t_a = t_b = 1s106s ≤ 10^6 ,表示所有技能均不会获得怒气且耗时为 11 ,总伤害较少。
  • 子任务 3330%30\% 的分数,满足 ti=ta=tb=1t_i = t_a = t_b = 1s106s ≤ 10^6 ,表示所有技能均耗时为 11 ,总伤害较少。
  • 子任务 4420%20\% 的分数,满足 s106s ≤ 10^6 ,表示总伤害较少。
  • 子任务 5520%20\% 的分数,没有特殊属性。

本蒟蒻代码:

#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;
}

题目

2025/2/7 17:06
加载中...