题目链接
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;
}