[二分答案][洛谷] P1316 丢瓶盖
水题
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1e5;
int arr[MAXN];
int ans = 0;
int N, M;
bool find(int len)
{
int rit = 1, ritv = arr[0] + len;
for(int i = 0; i < N; i++)
{
if(arr[i] >= ritv)
{
rit ++;
ritv = arr[i] + len;
}
if(rit == M)
return true;
}
return false;
}
void bsearch(int lst)
{
int fst = 1;
int mid = (fst + lst) / 2;
while(fst <= lst)
{
mid = (fst + lst) / 2;
if(find(mid))
{
ans = mid;
fst = mid + 1;
}
else
lst = mid - 1;
}
cout<<ans<<endl;
}
int main()
{
cin>>N>>M;
for(int i = 0; i < N; i++)
cin>>arr[i];
sort(arr, arr + N);
bsearch(arr[N - 1]);
return 0;
}