求助求助!很急!
  • 板块题目总版
  • 楼主zhege122
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/8/30 16:28
  • 上次更新2024/8/30 16:45:16
查看原帖
求助求助!很急!
1123449
zhege122楼主2024/8/30 16:28

题目背景:

ST正在打SL。SL血量为 h。ST有n个技能。第i个技能伤害为 a[i],冷却时为c[i], 在第x轮使用过某个技能后,在第 x + c[i] 轮才可以再次使用。每一轮,可以用掉所有没在冷却时间技能。 最开始,所有技能都不在冷却状态。需要多少轮才能把SL击败(即血量不为正数)?

input:

第一行包含一个正整数t(1≤t≤10^4)——测试用例的个数;

每个测试数据的第一行包含两个正整数 h和n(1≤h,n≤2*10^5)——SL的血量和ST的技能数量;

接下来一行 a[1],a[2]...an——每个技能的伤害;

接下来一行c[1], c[2]...cn——冷却时间;

保证:h和n的和都不超过2*10^5

output:

对每个测试用例,输出打败SL的最少轮数

样例输入1:

8
3 2
2 1
2 1
5 2
2 1
2 1
50 3
5 6 7
5 6 7
50 3
2 2 2
3 3 3
90000 2
200000 200000
1 1
100000 1
1
200000
6 7
3 2 3 2 3 1 2
6 5 9 5 10 7 7
21 6
1 1 1 1 1 1
5 5 8 10 7 6

样例输出1:

1
3
15
25
1
19999800001
1
21

输入模板(可参考):

#include <bits/stdc++.h>

using namespace std;

const int N = 2 * 1e5 + 10;
int a[N];
int c[N];

int main() {
	int t;
	scanf("%d", &t);
	while (t--) {
		int h, n;
		scanf("%d%d", &h, &n);
		for (int i = 1; i <= n; i++) {
			scanf("%d", &a[i]);
		}
		for (int i = 1; i <= n; i++) {
			scanf("%d", &c[i]);
		}
	}
	
	return 0;
}

思索了很久,求代码!

2024/8/30 16:28
加载中...