- 国贸周五19:30摸底赛 II
保持距离(二分答案示例代码)
- @ 2026-4-24 21:29:53
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,k,a[300005],ans;
bool check(int x){
//假设两个人之间的距离至少为x
//请问餐厅能坐得下k个人吗?
int cnt = 1;
int last = a[1];
for(int i=2;i<=n;i++){
if(a[i]-last>=x){
cnt++;
last = a[i];
}
}
if(cnt >= k) return 1;//代表答案x是合理的
else return 0;//代表答案x不合理
}
signed main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
int l=1,r=a[n]-a[1];
while(l<=r){
int mid = (l+r)/2;//检测mid答案是否合理
if(check(mid)==1){
ans = mid;
l = mid+1;
}
else{
r = mid-1;
}
}
cout << ans;
return 0;
}
0 条评论
目前还没有评论...