题目大意
解题思路
用二分搜索寻找最大的d
代码
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 100000+5;
int stalls[MAXN];
int main()
{
int N, C;
cin >> N >> C;
for(int i=0; i<N; i++)
cin >> stalls[i];
sort(stalls, stalls+N);
int l = 0; int r = 1000000000+5;
int ans = 0;
while(l < r)
{
int mid = (l + r) / 2;
int cnt = 1;
int now_pos = stalls[0];
// cout << mid << endl;
while(true)
{
if(cnt == C)
break;
int next_pos_index = lower_bound(stalls, stalls+N,now_pos+mid) - stalls;
if(next_pos_index == N)
break;
now_pos = stalls[next_pos_index];
cnt++;
}
if(cnt == C)
{
ans = max(ans, mid);
l = mid + 1;
}
else
r = mid;
}
cout << ans << endl;
}
知识点
- 整数型的二分还是用
l < r
作为条件, 并且l = mid+1
. 然后对于结果特地声明一个ans
记录防止出错。