ans
wangruihao
2024-02-03 16:20:08
3
返回题目
//此题一看就是二分答案题
#include<bits/stdc++.h>
using namespace std;
int n,m,x[100010];
int check(int w){
int sum=x[1]//初始在最左边(贪心),cnt=1;
for(int i=2;i<=n;i++){
if(x[i]-sum>=w) sum=x[i],cnt++;
}
if(cnt>=m) return true;
return false;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>x[i];
sort(x+1,x+1+n);//之后的查找必须从小到大
int l=1,r=x[n]//答案范围在1到x[n]内;
while(l+1<r){
int mid=(l+r)/2;
if(check(mid)) l=mid;
else r=mid;
}
if(check(r)) cout<<r;//因为r>l,答案先取大的
else cout<<l;
return 0;
}
{{ vote && vote.total.up }}