正经题解|都亮起来吧
2024-10-29 17:59:27
发布于:浙江
23阅读
0回复
0点赞
场地为直线型,可以看成是一个的数轴,路灯只会放在距离起点距离为整数的位置上。相邻的两个路灯之间的距离的最大值,即为整个场地的昏暗度。
如果一个昏暗度无法达到,那么更小的昏暗度也无法达到,因为已经无法再缩小间距的最大值。
如果一个昏暗度可以达到,那么更大的昏暗度也可以达到,只需要调整一下最大的那个距离即可。
如果我们判断了一个昏暗度能否达到,那么就可以确定答案与当前昏暗度的大小关系。这样一个有序的答案情况,我们就可以使用二分答案的方法来完成,记录能达到的最小昏暗度。
#include<bits/stdc++.h>
using namespace std;
int l,n,k;
int a[100005];
int L,R;
bool check(int dis){
int cnt=0;
for(int i=0;i<=n;i++){
if(a[i+1]-a[i]>dis){
cnt+=(a[i+1]-a[i])/dis;
if((a[i+1]-a[i])%dis==0)
cnt--;
}
if(cnt>k) return false;
}
return true;
}
int main(){
scanf("%d%d%d",&l,&n,&k);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
L=0;R=10000005;
a[0]=0;
a[n+1]=l;
int ans;
while(L<R){
int mid=(L+R)/2;
if(check(mid)) R=mid;
else L=mid+1;
}
cout<<L;
}
这里空空如也
有帮助,赞一个