这里二分最短跳跃距离
计算此时所需要移除的岩石
如果大于题干所给的可以岩石数就不行 然后return false
#include <iostream>
using namespace std;
const int N = (int)5e4;
int total_run;
int total_rocks;
int demand;
int dist[N];
int ans;
bool check(int x)
{
int last = 0, cnt = 0;
for (int i = 1; i <= total_rocks + 1; i++)
{
if (dist[i] - dist[last] >= x)
last = i;
else
cnt++;
}
return cnt <= demand;
}
int main()
{
cin >> total_run >> total_rocks >> demand;
dist[0] = 0;
dist[total_rocks + 1] = total_run;
for (int i = 1; i <= total_rocks; i++)
{
cin >> dist[i];
}
int left = 1;
int right = total_run;
while (left <= right)
{
int mid = (left + right) / 2;
if (check(mid))
{
ans = mid;
left = mid + 1;
}
else
{
right = mid - 1;
}
}
cout << ans << endl;
return 0;
}