题目链接
题目描述
解题思路
二分答案
代码实现
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=10000010;
int a[N],b[N];
int L,n,K;
bool check(int x)
{
int cnt=0;
for(int i=1;i<=n;i++) b[i]=a[i];
for(int i=0;i<=n;i++)
{
if(b[i+1]-b[i]>x){
cnt+=(b[i+1]-b[i]-1)/x;
}
}
//cout<<"cnt:"<<cnt<<" x:"<<x<<endl;
if(cnt<=K) return true;
else return false;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>L>>n>>K;
for(int i=1;i<=n;i++) cin>>a[i];
int l=1,r=L;
while(l<r)
{
int mid=l+r>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
cout<<l<<endl;
return 0;
}
总结
掌握二分答案算法