#BW224. 普及组CSP-J初赛程序阅读训练07
普及组CSP-J初赛程序阅读训练07
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int longestSubarray(vector<int>& a, int S) {
int n = a.size();
int left = 0, sum = 0, ans = 0;
for (int right = 0; right < n; right++) {
sum += a[right];
while (sum > S && left <= right) {
sum -= a[left];
left++;
}
ans = max(ans, right - left + 1);
}
return ans;
}
int main() {
int n, S;
cin >> n >> S;
vector<int> a(n);
for (int i = 0; i < n; i++) cin >> a[i];
cout << longestSubarray(a, S) << endl;
return 0;
}
约定:,,。
第 1 题
若输入为:
6 5
1 2 3 1 2 1
则程序输出为( )
{{ select(1) }}
- 3
- 4
- 5
- 6
第 2 题
longestSubarray 函数的时间复杂度是( )
{{ select(2) }}
第 3 题
在 longestSubarray 函数中,内层 while 循环的条件是 sum > S && left <= right。如果将其改为 while (sum > S)(去掉 left <= right),且输入数组全为正整数,则( )
{{ select(3) }}
- 程序功能不变
- 当所有元素和大于 S 时,
left可能超过right,导致sum -= a[left]越界 - 程序运行速度变慢
- 程序会输出更大的答案
第 4 题
若输入为:
4 0
0 0 0 0
则程序输出为( )
{{ select(4) }}
- 0
- 1
- 3
- 4
第 5 题
若将第 12 行的 while (sum > S && left <= right) 修改为 while (sum > S),且输入为:
3 2
1 1 1
则程序输出为( )
{{ select(5) }}
- 2
- 3
- 程序错误
- 1
第 6 题
若将第 9 行的初始值 int left = 0, sum = 0, ans = 0; 改为 int left = 0, sum = 0, ans = 1;,其他代码不变,且输入为:
3 0
5 6 7
则程序输出为( )
{{ select(6) }}
- 0
- 1
- 3
- 程序错误
