站外题,咋写
查看原帖
站外题,咋写
1120280
Codingqwq_luogu楼主2024/10/26 21:17

描述

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

毛豆初始生命值为 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解释

只进行了一次游戏,从第一个敌人开始,毛豆的初始生命值 2525,威胁度0 0

敌人战斗力敌人胆量是否战斗战后生命值战后威胁度
104胆量大于 0,开始战斗144
86胆量大于 4,开始战斗76
53胆量小于 6,被吓跑不变不变
144胆量小于 6,又被吓跑不变不变
910胆量大于 6,开始-2-
204游戏已经结束游戏已经结束游戏已经结束
因此游戏最后一次战斗是和第55位敌人。

样例2解释

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

数据规模

对于 100100% 的数据:

1n1091≤n≤10 ^ 9 ,初始血量 1m,T1051≤m,T≤10 ^ 5 ,敌人数量,游戏轮数 1ai10001≤a i ​ ≤1000,敌人战斗力 1bi1091≤b i ​ ≤10 ^ 9 ,敌人胆量 1k1≤k≤,游戏开始的位置

我的代码

#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;
}
2024/10/26 21:17
加载中...