1 条题解

  • 0
    @ 2026-6-19 10:30:39

    📝 题目大意

    NN 种伤药,第 ii 种可以将怪兽体力增加 PiP_iPiP_i 严格递增)。怪兽当前体力为 HH,目标体力至少为 XXH<XH < X)。保证存在至少一种伤药能达到目标。求能达成目标的效果最弱的伤药编号。

    💡 解题思路

    1. 题目分析

      • N100N \leq 100,数据规模极小,直接模拟即可。
      • PiP_i 严格递增(P1<P2<<PNP_1 < P_2 < \dots < P_N),说明编号越大药效越强。
      • H<XH < X,即初始状态不满足目标,必须用药。
      • 保证 PN=999P_N = 999(足够大),因此一定存在解。
    2. 算法推导

      • 按编号顺序依次读取每种伤药的效果值 PiP_i
      • 对于第 ii 种伤药,判断 H+PiXH + P_i \geq X 是否成立。
      • 由于 PiP_i 递增,第一个满足条件的 ii 就是效果最弱的可行伤药编号。
      • 找到后直接输出 ii 并结束程序即可,无需继续遍历。
    3. 边界与细节

      • 输入保证一定有解,无需考虑无解情况。
      • PiP_i 已按升序给出,无需手动排序。
      • 注意输出的是伤药编号(1-based),不是 PiP_i 的值。

    ⏱️ 复杂度分析

    • 时间复杂度O(N)O(N),最多遍历 NN 种伤药。
    • 空间复杂度O(1)O(1),仅使用几个整数变量。

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    int main() {
        int n, h, x;
        cin >> n >> h >> x;
        // 按编号顺序遍历每种伤药(药效递增)
        for (int i = 1; i <= n; i++) {
            int a;
            cin >> a;               // 读取第 i 种伤药的效果值
            if (h + a >= x) {       // 判断服用后体力是否达标
                cout << i << endl;  // 第一个达标的就是最弱的,输出编号
                return 0;
            }
        }
        return 0;
    }
    
    • 1

    信息

    ID
    734
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者