首页 > 其他分享 >洛谷题单指南-二分查找与二分答案-P2678 [NOIP2015 提高组] 跳石头

洛谷题单指南-二分查找与二分答案-P2678 [NOIP2015 提高组] 跳石头

时间:2024-03-01 14:44:37浏览次数:32  
标签:二分 NOIP2015 移走 P2678 mid 距离 石头 int

原题链接:https://www.luogu.com.cn/problem/P2678

题意解读:最短跳跃距离越大,要移走的石头就越多,因此可以根据最短跳跃距离的不同把情况分为两类:移走的石头数<=M、移走的石头数>M,对最短跳跃距离二分即可。

解题思路:

二分的判定条件如下:

对于给定最短跳跃距离,需要计算移走的石头数,

只需要比较相邻两个石头的距离,如果小于最短跳跃距离,就移走后一块石头,累加移走的石头总数

如果移走石头总数<=M说明符合要求,可以继续二分更大的跳跃距离

需要注意比较相邻石头时,要考虑到终点的石头,移除的是最后一个非终点石头,与之前的移除操作没有区别,都是累加1

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 50005;

int a[N], L, n, m, ans;

bool check(int x)
{
    int cnt = 0;
    int last = 0; //前一个石头到起点的距离
    for(int i = 1; i <= n + 1; i++)
    {
        if(a[i] - last < x) cnt++; //跟前一个石头比较,如果距离<x,移除后一个
        else last = a[i]; //如果没有移除,更新前一个石头的位置为当前石头,便于后面的比较
    }
    return cnt <= m;
}

int main()
{
    cin >> L >> n >> m;
    for(int i = 1; i <= n; i++) cin >> a[i];
    a[n + 1] = L; //要考虑到终点的石头

    int l = 1, r = L;
    while(l <= r)
    {
        int mid = (l + r) >> 1;
        if(check(mid)) ans = mid, l = mid + 1;
        else r = mid - 1;
    }
    cout << ans;

    return 0;
}

 

标签:二分,NOIP2015,移走,P2678,mid,距离,石头,int
From: https://www.cnblogs.com/jcwy/p/18047039

相关文章

  • 【STL】二分搜索的实现与stl标准库的应用
    在算法题中经常会出现搜索的题目,如果使用暴力搜索在数据量较大时会超时,(如\(10^5\)数量级时\(O(n^2)\)就会超时,\(O(nlogn)\)则通常不会),因此常用二分搜索等进行优化。虽然stl库中关于二分搜索的接口很好用,很适合区间二分搜索,但我们仍需掌握C++实现二分搜索,“虽然这是一个简单的算法......
  • 洛谷题单指南-二分查找与二分答案-P2440 木材加工
    原题链接:https://www.luogu.com.cn/problem/P2440题意解读:切出来的长度越短,则段数越多,可以通过二分长度来解决。解题思路:二分的关键在于判定条件,此题就是对二分到的长度计算可以切割的段数,如果段数大于等于k,则满足要求,可以继续加大长度。注意点:1、计算切割出来的段数是累加:每......
  • 整数二分算法(自用)
    1.思想对于一个已排序数组,找到一个点,使得数组被分为两部分,即此点左部和右部(点在左部或右部中的一个),比如数组中小于等于某数x的部分与大于的部分;对于整数二分而言两个范围之间是没有空隙的,即左部分的边界x的下一个数一定在右部分。我们可以根据题目选择多种方法二分数组,大类上分......
  • 二分
    二分查找模板总结二分查找是一种在有序数组中查找某一特定元素的搜索算法。元素集合有顺序,元素性质有分界点,二分法就可以用来求分界点,并不一定要求集合中元素是不重复的。算法思路:假设目标值在闭区间[left,right]中,每次将区间长度缩小一半,当left=right时,我们就找到了......
  • 洛谷题单指南-二分查找与二分答案-P1678 烦恼的高考志愿
    原题链接:https://www.luogu.com.cn/problem/P1678题意解读:要计算不满意度之和的最小值,就要保证每个人的不满意度最小,即选择的学校录取分数-学生分数之差的绝对值最小。解题思路:如何在学校录取分数中找与学生分数最接近的呢?有三种可能:1、学生分数在录取分数中存在相等的2、学......
  • 洛谷题单指南-二分查找与二分答案-P1102 A-B 数对
    原题链接:https://www.luogu.com.cn/problem/P1102题意解读:寻找A-B=C的数对数量,C大于0,B一定比A小,枚举B,找A是否存在即可。解题思路:先将数据由小到大排序,接下来介绍两种方法:二分、双指针1、二分枚举第1~n-1个数,作为B,寻找A=B+C的数量,只需要通过二分查找第一A和最后一个A的位置l、......
  • CF514D R2D2 and Droid Army(二分,ST表)
    传送门解题思路直接二分能干掉的人数,然后check函数枚举所有区间,因为m很小,所以可以用m个ST表预处理每个区间对应每个属性的最大值。一是需要注意二分的写法,而是注意check(0)时候的特判。AC代码#include<iostream>#include<algorithm>#include<cmath>#include<cstdio>#......
  • 洛谷题单指南-二分查找与二分答案-P2249 【深基13.例1】查找
    原题链接:https://www.luogu.com.cn/problem/P2249题意解读:找有序数组中某个数第一次出现的位置,二分模版题,由于是二分板块的第一题,有必要对二分的各种模版进行介绍。解题思路:关于二分的一切:1、二分的本质二分的本质,是通过某种判定把目标范围划分成两个区间二分问题通常有两......
  • 二分查找——修补木桶
    修补木桶-HihoCoder1362-VirtualJudge(vjudge.net)#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>usingnamespacestd;#defineintlonglong#defineQAQ0constintN=2e5+5,inf=0x3f3f3f3f,mod=1e7+7;int......
  • 【算法】关于最长递增子序列(LIS)二分+贪心解法
    前言我们都知道,解决LIS的常规解法为DP,时间复杂度为O(n^2),但是在一些条件苛刻的问题中,通常DP的解法会超时。那么,是否存在一种时间复杂度更优秀的解法呢?答案是肯定的,有一种二分加贪心的解法可以将时间复杂度降低为O(nlogn)。详解如果我们现在要求下面这一组数据的LIS:我们需......