P2678 跳石头
这道题其实很水
我们二分最长距离,最后用 $check$ 函数 判断合不合法
一下是核心代码
$check$ 函数这样写:
bool check(int x){
int last=0,tot=0;
for(int i=1;i<=n;i++){
if(a[i]-last<x) tot++;
else last=a[i];
}
if(len-last<x) tot++;
return tot<=m;
}
二分这样写:
int l=1,r=len+1;
while(l+1<r){
int mid=(l+r)/2;
if(check(mid)) l=mid;
else r=mid;
}
cout<<l;
标签:二分,P2678,题解,石头,int,check
From: https://www.cnblogs.com/IOIAKmerlin/p/17832510.html