二分模板,记不清时来参考吧。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<iomanip>
#include<cstring>
#include<climits>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
#define go(i,a,b) for(int i=a;i<=b;++i)
#define com(i,a,b) for(int i=a;i>=b;--i)
#define mem(a,b) memset(a,b,sizeof(a))
#define fo(i,a) for(int i=0;i<a;++i)
typedef long long ll;
const int inf = 0x3f3f3f3f, N = 1e5 + 10;
int pos[N], n, c;
void read(int& x) {
int f = 1; char s = getchar(); x = 0;
while (!isdigit(s)) { if (s == '-') f = -1; s = getchar(); }
while (isdigit(s)) { x = (x << 3) + (x << 1) + s - '0'; s = getchar(); }
x *= f;
}//读入优化
bool pd(int d) {
int last = pos[1], res = c - 1;
go(i, 2, n) {
if (!res)
break;
if (pos[i] - last >= d) {
last = pos[i];
res--;
}
}
if (res)
return 0;
else
return 1;
}
void erfen() {
int l = 0, r = 1000000000;
while (l <= r) {
int mid = (l + r) >> 1;
if (pd(mid))
l = mid + 1;
else
r = mid - 1;
}
cout << l - 1;
}
int main() {
cin >> n >> c;
go(i, 1, n)
read(pos[i]);
sort(pos + 1, pos + n + 1);
erfen();
return 0;
}