题目链接
https://www.luogu.com.cn/problem/P2678

题目思路
1.求最大值中的最小值之类的题目,典型的二分答案;
2.求出答案的区间范围,在这之内进行二分查找,确定最适合的情况;
代码展示
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+7;
int num[maxn];
int l,n,m;
bool check(int x){
int tol=0;int ans=0;
for(int i=1;i<=n+1;i++){
if(num[i]-tol<=x)ans+=1;
else tol=num[i];
}
return ans<=m;
}
int main(){
cin>>l>>n>>m;
int left,right=l;
for(int i=1;i<=n;i++){
cin>>num[i];
left=min(num[i]-num[i-1],left);
}
num[n+1]=l;
left=min(left,num[n+1]);
int ans;
while(left<=right){
int mid=left+right >>1;
if(check(mid))left=mid+1;//mid能够作为最小值,那试试更大的值能不能
else right=mid-1; //mid不能作为最小值,那试试更小的值行不行
}
cout<<left<<endl;
return 0;
}
该博客介绍了如何利用二分查找算法解决一道编程题,题目要求找到在一定限制下,区间最大值中的最小值。博主详细解析了题目思路,通过确定答案可能的区间,然后进行二分搜索来优化解决方案。代码示例展示了C++实现,通过不断调整查找边界,最终找到满足条件的最小值。
976

被折叠的 条评论
为什么被折叠?



