本周大概看了下二分(进度好慢...巩固基础很重要, 只能这样安慰自己了...)感觉还蛮有意思的, 写了几道很板子的题, 打算这周把二分结了, 下周开其他模块, 发个题解记录一下学习进程, 嘿嘿
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll arr[100005], n, c;
bool judge(int mid){
int num=1, sum=0; //第一个牛棚放一头奶牛
for(int i=2; i<=n; i++){
sum+=arr[i];
if(sum>=mid){ //距离足够就放一头牛
num++;
sum=0;
}
}
if(num>=c)
return 1;
return 0;
}
int main(){
scanf("%lld %lld", &n, &c);
ll x;
for(int i=1; i<=n; i++)
scanf("%lld", &arr[i]);
sort(arr+1, arr+1+n);
for(int i=n; i>=2; i--) //构造每个牛棚之间的距离
arr[i]=arr[i]-arr[i-1];
ll l=1, r=1000000000;
while(l<r){ //求最大的最小值模板
ll mid=r+l+1>>1;
if(judge(mid))
l=mid;
else
r=mid-1;
}
printf("%lld\n", l);
return 0;
}