站外题,咋写

题目总版

Codingqwq_luogu @ 2024-10-26 21:17:22

描述

小明学习编程后打算设计一个游戏给毛豆试玩。

毛豆初始生命值为 n,威胁度为 0。有 m 位敌人,第 i 位敌人的战斗力为 a i ​ ,胆量为 b i ​ 。

毛豆玩了 T 轮游戏,每次会挑选一个位置 k,然后从第 k 个敌人开始,往后一个个对敌人尝试发起战斗:

如果当前敌人的胆量小于等于 毛豆的威胁度,则会被 毛豆吓坏直接逃跑不战斗,否则就会开始战斗。 假设当前与第 i 为敌人进行了战斗,战斗后 毛豆的生命值就会减少 a i ​ ,然后威胁度会变为 b i ​ 。 如果生命值小于等于 0,那么 毛豆被视为被打败了,这轮游戏就结束了。 和第 m 位敌人战斗后,就没有敌人了,游戏也就自然结束了。 每轮游戏开始时 毛豆的生命值都会恢复如初,威胁度会重新归 0。所有被吓跑的敌人也都会回来。请你输出每轮游戏 毛豆最后被谁打败了,如果游戏结束时 毛豆没有被打败,输出 0。

输入描述

第一行为三个数 n,m,T。

接下来m 行都有a i ​ 和b i ​ 。

接下来 T 行,第 i 行为第 i 轮游戏的开始位置 k。

输出描述

输出 T 行,即每轮游戏 毛豆最后被谁打败了,如果没有被打败过输出 0。

用例输入 1 

25 6 1
10 4
8 6
5 3
14 4
9 10
20 4
1
用例输出 1 

5
用例输入 2 

19 6 6
10 4
8 6
5 3
14 4
9 10
20 4
1
2
3
4
5
6
用例输出 2 

5
0
4
5
0
6

样例1解释

只进行了一次游戏,从第一个敌人开始,毛豆的初始生命值 25,威胁度 0 敌人战斗力 敌人胆量 是否战斗 战后生命值 战后威胁度
10 4 胆量大于 0,开始战斗 14 4
8 6 胆量大于 4,开始战斗 7 6
5 3 胆量小于 6,被吓跑 不变 不变
14 4 胆量小于 6,又被吓跑 不变 不变
9 10 胆量大于 6,开始 -2 -
20 4 游戏已经结束 游戏已经结束 游戏已经结束

因此游戏最后一次战斗是和第 5 位敌人。

样例2解释

和样例 1 敌人一样,初始血量不同,从每个敌人都开始打一次。

数据规模

对于 100% 的数据:

9

,初始血量

5

,敌人数量,游戏轮数

i ​ ≤1000$,敌人战斗力 $1≤b i ​ ≤10 ^ 9

,敌人胆量

### 我的代码 ```cpp #include<bits/stdc++.h> #pragma GCC optimize(3,"Ofast","inline") using namespace std; int n, m, T, wei; int t; int ab[100005][3]; int main() { freopen("game.in", "r", stdin); freopen("game.out", "w", stdout); scanf("%d%d%d", &n, &m, &T); int n_mirror, wei_mirror; n_mirror = n; wei_mirror = wei; for(int i = 1; i <= m; i++) { cin >>ab[i][1] >>ab[i][2]; } for(int i = 1; i <= T; i++) { cin >>t; bool flag = true; for(int j = t; j <= m; j++) { if(ab[j][2] <= wei) { continue; } else { n = n - ab[j][1]; wei = ab[j][2]; if(n <= 0) { cout <<j <<endl; flag = false; break; } } } if(flag) { cout <<"0" <<endl; } n = n_mirror; wei = wei_mirror; } fclose(stdin); fclose(stdout); return 0; } ```

|