1 条题解
-
0
📝 题目大意
有一瓶可消毒 只手的消毒液, 个外星人依次前来,每个有 只手。求有多少个外星人能完整消毒所有手——一旦某个外星人消毒液不够,他会用光剩余消毒液,后续外星人无法再消毒。
💡 解题思路
- 题目分析:,数据范围极小,直接模拟即可。关键点在于:一旦剩余消毒液不足以满足当前外星人的需求,过程立即终止,后续外星人无法再消毒。
- 算法推导:用
remain记录剩余消毒液量,初始为 。遍历每个外星人,若remain >= H[i],则remain -= H[i],count++;否则直接break退出循环。最终输出count。 - 边界与细节:当 恰好够所有外星人时,
count = N;当第一个外星人就不够时,count = 0。注意break的时机——剩余量不足当前外星人需求时立刻终止,不能再继续循环。
⏱️ 复杂度分析
- 时间复杂度:,单次遍历。
- 空间复杂度:,存储 数组;也可优化到 ,边读边处理。
💻 标准代码 (C++)
#include <iostream> #include <vector> using namespace std; int main() { int N, M; cin >> N >> M; vector<int> H(N); for (int i = 0; i < N; i++) { cin >> H[i]; } int remain = M; // 剩余消毒液量 int count = 0; // 完全消毒的外星人数 for (int i = 0; i < N; i++) { if (remain >= H[i]) { // 剩余量足够当前外星人消毒全部手 remain -= H[i]; // 扣除对应手数 count++; // 计数 +1 } else { break; // 不够则终止,后续外星人无法再消毒 } } cout << count << endl; return 0; }
- 1
信息
- ID
- 799
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者