路标设置
[P3853 TJOI2007]路标设置 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll biao[200000000] = {0};
int main()
{
ll l, n, k;
cin >> l >> n >> k;
for (ll i = 0; i < n; i++)
{
cin >> biao[i];
}
ll left = 0;
ll right = l;
while (left < right)
{
ll mid = (left + right) / 2;
//如果没用完路标而且还能保证所有间隔都小于mid,就缩小mid再次二分
ll m = 0;
ll shangyici = 0;//记录上次以放置路标的位置
ll k_temp = 0;
for (ll i = 0; i < n - 1; i++)
{
if (biao[i + 1] - biao[i] > mid)
{
while (biao[i + 1] - shangyici > mid)
{
k_temp++;
shangyici += mid;
}
}
shangyici = biao[i + 1];
}
if(k_temp<=k)
{
right = mid;
}
else
{
left = mid + 1;
}
}
cout << left;
return 0;
}