太久没有做这么简单,单纯的二分题目了。
首先哪些题目可以用二分呢?常见的就是问最大,最小值。然后通过二分法,不断缩小答案范围(通过是否满足题目条件去判断)。
这道跳石头,问的是跳跃距离,所以我们二分跳跃距离,然后通过跳跃次数来判断是否可以达到,来不断二分得范围。
由于考试过后,代码没来得及存储,所以只重写一下check了
bool check(int length){
int sum,last;
times=0;last=0;
for (int i=1;i<=n;i++){
if (a[i]-last<length) { times+=1;continue;}
last=a[i];
}
if (times>m) return 0;
return 1;
}