《算法竞赛进阶指南》读书笔记汇总
这里面是我在阅读《算法竞赛进阶指南》这本书时的一些思考,有兴趣可以瞧瞧!
如若发现什么问题,可以通过评论或者私信作者提出。希望各位大佬不吝赐教!
C. Balanced Stone Heaps (CF763Div2)
题目链接
思路:二分最小值,从后往前遍历,尽量满足当前的高度,若出现当前高度小于二分的值,那么放回false;否则返回true。
AC代码:
#include<bits/stdc++.h>
#define N 200005
using namespace std;
int n;
int h[N],tmp[N];
bool check(int x){
for(int i = 1;i <= n;i ++)
tmp[i] = h[i];
for(int i = n;i > 2;i --){
if(tmp[i] < x) return false;
int d = min(h[i],tmp[i] - x) / 3;
tmp[i] -= 3 * d;
tmp[i - 1] += d;
tmp[i - 2] += 2 * d;
}
return (tmp[1] >= x && tmp[2] >= x);
}
void solve(){
cin >> n;
for(int i = 1;i <= n;i ++)
cin >> h[i];
int l = 1,r = 1e9;
while(l < r){
int mid = l + r + 1 >> 1;
if(check(mid)) l = mid;
else r = mid - 1;
}
cout << r << endl;
}
int main(){
int T;cin >> T;
while(T --)
solve();
return 0;
}