2021-2022 ICPC, NERC, Southern and Volga Russian Regional Contest Smash the Trash(二分)
链接
题意:
思路:二分答案,一个地方的垃圾如果小于人数直接清理,垃圾大于人数二倍就不行,剩下得情况就是
a
[
i
+
1
]
+
=
(
a
[
i
]
−
m
i
d
)
∗
2
a[i+1]+=(a[i]-mid)*2
a[i+1]+=(a[i]−mid)∗2,最后判第n天能不能扫完
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[200020], b[200020];
int n;
bool check(int mid)
{
for (int i = 1; i <= n; i++) b[i] = a[i];
for (int i = 1; i < n; i++) {
if (b[i] > mid * 2) return false;
if (mid >= b[i]) continue;
b[i + 1] += ((b[i] - mid) * 2);
}
return b[n] <= mid;
}
signed main()
{
cin >> n;
for (int i = 1; i <= n; i++) {cin >> a[i];}
int l = 0, r = 1e9;
while (l < r) {
int mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid + 1;
}cout << l;
return 0;
}