二分答案,代码如下
#include <iostream>
using namespace std;
int L, N, K, a[100010], b[100010];
bool P(int k)
{
int tot = 0;
for (int i = 1; i < N; i++)
{
if (b[i] > k)
{
tot += b[i] / k;
}
}
return tot <= K;
}
int main()
{
cin >> L >> N >> K;
for (int i = 0; i < N; i++)
{
cin >> a[i];
}
for (int i = 1; i < N; i++)
{
b[i] = a[i] - a[i - 1];
}
int left = 0, right = L, mid, ans;
while (left <= right)
{
mid = left + right >> 1;
if (mid == 0)
{
break;
}
if (P(mid))
{
ans = mid;
right = mid - 1;
}
else left = mid + 1;
}
cout << ans;
}