#12179. 珅泽教育CSP-J第一轮模拟考第二十二套 第 38 题
珅泽教育CSP-J第一轮模拟考第二十二套 第 38 题
三、完善程序(单选题,每小题 3 分,共计 30 分)
程序(1):序列问题
给定序列 ,求有多少对 满足 。数据满足 ,。
提示:对于任意 , 或 能对答案产生 1 的贡献,因此可以用总对数减去 的 数量。试补全程序。
#include <bits/stdc++.h>
using namespace std;
const int Maxn = ①;
int n, a[Maxn];
long long s[Maxn], ans;
bool check(int l, int r) {
if (s[r] - s[l - 1] == ②) return true;
return false;
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++)
s[i] = s[i - 1] + a[i];
ans = ③;
for (int i = 1; i <= n;) {
int l = i, r = n, pos = n;
while (④) {
int mid = (l + r) >> 1;
if (check(l, mid))
l = mid + 1, pos = mid;
else
r = mid - 1;
}
ans -= ⑤;
i = pos + 1;
}
cout << ans;
}
- ⑤ 处应填( )。
{{ select(1) }}
(pos - l + 1) * (pos - l) / 21LL * (pos - l + 1) * (pos - l) / 2(pos - i + 1) * (pos - i) / 21LL * (pos - i + 1) * (pos - i) / 2