P3853 [TJOI2007] 路标设置
Everything_ · · 题解
读题
我们要求出最小的空旷指数,“空旷指数”指的是公路上相邻路标的最大距离,我们就来分析一下样例:
101 2 1
0 101
51
也就是在
在两个路障之间,我们要放置若干个路障我们就要使两两之间路障的距离尽量相等。
那我们就可以写代码了
相信要写这一道题的同学应该都已经对二分算法已经有了一定的理解与联系了,那我们就不过多介绍二分了。
因为题面要求的数是最小的“空旷指数”,所以我们显而易见二分枚举“空旷指数”。
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn = 10000005;
LL m, n, k, a[maxn], mid, l, r;
bool check(LL mid)
{
LL s = a[1], w = 0;
for(int i = 2; i <= n; i++)
{
while(a[i] - s > mid)
{
w++;
s = s + mid;
}
if(a[i] - s <= mid)
s = a[i];
}
return w <= k;
}
int main()
{
cin >> m >> n >> k;
r = m + 1;
for(int i = 1; i <= n; i++)
cin >> a[i];
sort(a + 1, a + 1 + n);
while(l + 1 < r)
{
mid = l + r >> 1;
if(check(mid))
r = mid;
else
l = mid;
}
cout << r;
return 0;
}
PS*
关于