#CSPJCP01. CSP-J 完善程序 1:批次记录器(选择题版)
CSP-J 完善程序 1:批次记录器(选择题版)
题目类型
CSP-J 初赛风格完善程序题。本题所有空均已改为单项选择,不需要手动输入代码。每空只有一个正确选项。
程序说明
输入 n、k 和一个长度为 n 的正整数序列。程序会按照原有顺序把序列处理成若干连续批次,并输出一个整数。这个整数的实际意义没有直接给出,需要结合 check 函数与二分过程自行推断。
数据保证 1 <= k <= n <= 100000,1 <= a[i] <= 10^9。
程序
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n, k;
long long a[N];
bool check(long long x) {
int cnt = 1;
long long sum = 0;
for (int i = 1; i <= n; i++) {
if (/* 空 3 */) {
cnt++;
sum = a[i];
} else {
sum += a[i];
}
}
return /* 空 4 */;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k;
long long L = 0, R = 0;
for (int i = 1; i <= n; i++) {
cin >> a[i];
/* 空 1 */;
/* 空 2 */;
}
while (L < R) {
long long mid = L + (R - L) / 2;
if (check(mid))
R = mid;
else
/* 空 5 */;
}
cout << L << '\n';
return 0;
}
选择区
空 1(20 分)
为了使 L 成为一定成立的搜索下界,空 1 应填( )。
{{ select(1) }}
- A.
L = max(L, a[i]) - B.
L = min(L, a[i]) - C.
L += a[i] - D.
L = max(L, (long long)i)
空 2(20 分)
为了使 R 成为一定可行的搜索上界,空 2 应填( )。
{{ select(2) }}
- A.
R = max(R, a[i]) - B.
R = min(R, a[i]) - C.
R = a[i] - D.
R += a[i]
空 3(20 分)
当继续加入 a[i] 会使当前批次超过阈值 x 时,程序需要新开一个批次。空 3 应填( )。
{{ select(3) }}
- A.
sum + a[i] >= x - B.
sum + a[i] > x - C.
sum > x - D.
a[i] > sum
空 4(20 分)
check(x) 应在阈值 x 可行时返回真。空 4 应填( )。
{{ select(4) }}
- A.
cnt == k - B.
cnt >= k - C.
cnt <= k - D.
cnt < k
空 5(20 分)
当 check(mid) 为假时,空 5 应填( )。
{{ select(5) }}
- A.
L = mid + 1 - B.
L = mid - C.
R = mid - 1 - D.
R = mid + 1
相关
在下列比赛中: