P2026 - [蓝桥杯2022初赛] 青蛙过河 - New Online Judgehttp://oj.ecustacm.cn/problem.php?id=2026二分枚举y,检查每一段长度为y的区间内的石头高度总和是否>=2x。
如果有一段长度为y的区间不能被经过2x次,那么肯定不行。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 4;
ll sum[N] = {0};
int n, x;
int check(int y) {
for (int i = y; i <= n - 1; i++) {
if (sum[i] - sum[i - y] < 2 * x) {
return 0;
}
}
return 1;
}
int main() {
cin >> n >> x;
int h;
for (int i = 1; i <= n - 1; i++) {
cin >> h;
sum[i] = sum[i - 1] + h;
}
int left = 0, right = 1e5;
while (left < right) {
int mid = (left + right) >> 1;
if (check(mid)) {
right = mid;
} else {
left = mid + 1;
}
}
cout << left;
return 0;
}