1 条题解

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

    📝 题目大意

    高桥队(先攻)已完成 9 个上半局得分,青木队(后攻)已完成 8 个下半局得分。已知当前高桥队总分 ≥ 青木队总分,求青木队在第 9 局下半局至少需要得多少分才能反超获胜(严格大于高桥队总分)。

    💡 解题思路

    1. 题目分析Ai,Bj99A_i, B_j \leq 99,数据范围很小,直接求和即可。关键隐藏条件是 AA 的总和 ≥ BB 的总和,保证答案至少为 1。
    2. 算法推导
      • sumA = 高桥队 9 局总分(即 A[0] + A[1] + ... + A[8]),sumB = 青木队前 8 局总分(即 B[0] + B[1] + ... + B[7])。
      • 设青木队第 9 局得分为 xx,则青木队最终总分为 sumB + x
      • 需满足 sumB + x > sumA,即 x>sumAsumBx > sumA - sumB
      • 由于 xx 为整数,最小值为 sumA - sumB + 1
    3. 边界与细节:由题目约束 sumA ≥ sumB,故 sumA - sumB ≥ 0need ≥ 1,不会出现非正数答案。无需特殊处理。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅需遍历固定 9 + 8 = 17 个元素求和。
    • 空间复杂度O(1)O(1),只需几个整型变量。

    💻 标准代码 (C++)

    #include <iostream>
    using namespace std;
    int main() {
        int A[9], B[8];
        // 读入高桥队 9 局上半局得分
        for (int i = 0; i < 9; i++) {
            cin >> A[i];
        }
        // 读入青木队前 8 局下半局得分
        for (int i = 0; i < 8; i++) {
            cin >> B[i];
        }
        // 分别计算两队当前总分
        int sumA = 0, sumB = 0;
        for (int i = 0; i < 9; i++) sumA += A[i];  // 高桥队总分
        for (int i = 0; i < 8; i++) sumB += B[i];  // 青木队总分(前 8 局)
        // 青木队需要至少 sumA - sumB + 1 分才能反超
        int need = sumA - sumB + 1;
        cout << need << endl;
        return 0;
    }
    
    • 1

    信息

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