提交时间:2025-07-24 09:32:32

运行 ID: 335805

#include<bits/stdc++.h> using namespace std; int n, c, x[100005]; //牛棚数量,牛数量,牛棚坐标 bool check(int dis){ //检查牛棚够不够 int cnt=1,place=0; //第1头牛放在第1个牛棚 for(int i=1; i<n; i++) //检查后面的每个牛棚 if(x[i]-x[place] >= dis){ //如果超过dis的距离位置有牛棚 cnt++; // 放1头牛 place=i; //更新牛的位置 } if(cnt>=c) return 1; //牛棚够 else return 0; //牛棚不够 } int main(){ scanf("%d%d", &n, &c); for(int i=0; i<n; i++) scanf("%d", &x[i]); sort(x, x+n); //对牛棚坐标排序 //二分, 偏右 int left=0, right= x[n-1] - x[0]; int ans=0; while(left<right){ int mid= left+right>>1; if(check(mid)){ ans=mid; left=mid+1; }else right=mid; } cout<<ans; return 0; }