1 条题解
-
0
📝 题目大意
高桥队(先攻)已完成 9 个上半局得分,青木队(后攻)已完成 8 个下半局得分。已知当前高桥队总分 ≥ 青木队总分,求青木队在第 9 局下半局至少需要得多少分才能反超获胜(严格大于高桥队总分)。
💡 解题思路
- 题目分析:,数据范围很小,直接求和即可。关键隐藏条件是 的总和 ≥ 的总和,保证答案至少为 1。
- 算法推导:
- 设
sumA= 高桥队 9 局总分(即A[0] + A[1] + ... + A[8]),sumB= 青木队前 8 局总分(即B[0] + B[1] + ... + B[7])。 - 设青木队第 9 局得分为 ,则青木队最终总分为
sumB + x。 - 需满足
sumB + x > sumA,即 。 - 由于 为整数,最小值为
sumA - sumB + 1。
- 设
- 边界与细节:由题目约束
sumA ≥ sumB,故sumA - sumB ≥ 0,need ≥ 1,不会出现非正数答案。无需特殊处理。
⏱️ 复杂度分析
- 时间复杂度:,仅需遍历固定 9 + 8 = 17 个元素求和。
- 空间复杂度:,只需几个整型变量。
💻 标准代码 (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
- 上传者