1 solutions
-
0
Guest MOD
-
0
维护几个状态
-
cur_monster:当前攻击的怪物索引(从0开始)。 -
current_hp:当前怪物的剩余血量(初始为第一只怪物的血量)。 -
att:当前攻击力(初始为1)。 -
ans:记录每只怪物的击败时间。 -
对每个操作(按序号1到m),根据类型更新状态:
- 操作1:扣除当前攻击力,若怪物血量≤0则记录时间,切换怪物并重置攻击力。
- 操作2:攻击力+1。
- 操作3:跳过。
-
初始化时,
current_hp为第一只怪物的血量,cur_monster为0。 -
每次操作1攻击后,若怪物被击败,
cur_monster指向下一只,current_hp更新为其初始血量,攻击力重置为1。
线性遍历操作序列,时间复杂度.
注意,由于按照读入的字符串下标是从开始,所以第下标为的位置对应的是第位。
#include <iostream> #include <vector> #include <string> using namespace std; int main() { int n, m; cin >> n >> m; vector<int> a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; } string ops; cin >> ops; vector<int> defeat_times(n); int attack = 1; int current_monster = 0; for (int op_num = 0; op_num < m; ++op_num) { char op = ops[op_num]; if (op == '1') { a[current_monster] -= attack; if (a[current_monster] <= 0) { defeat_times[current_monster] = op_num + 1; current_monster++; if (current_monster >= n) break; } attack = 1; } else if (op == '2') { attack++; } } for (int i = 0; i < n; ++i) { cout << defeat_times[i] << " "; } cout << endl; return 0; } -
- 1
Information
- ID
- 1502
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 8
- Tags
- (None)
- # Submissions
- 193
- Accepted
- 30
- Uploaded By