首页 > 其他分享 >青蛙过河

青蛙过河

时间:2023-01-17 19:23:31浏览次数:40  
标签:pre 过河 int 2x 青蛙 石头 跳跃

小青蛙住在一条河边, 它想到河对岸的学校去学习。小青蛙打算经过河里 的石头跳到对岸。

河里的石头排成了一条直线, 小青蛙每次跳跃必须落在一块石头或者岸上。 不过, 每块石头有一个高度, 每次小青蛙从一块石头起跳, 这块石头的高度就 会下降 1 , 当石头的高度下降到 0 时小青蛙不能再跳到这块石头上(某次跳跃 后使石头高度下降到 0 是允许的)。

小青蛙一共需要去学校上 x 天课, 所以它需要往返 2x 次。当小青蛙具有 一个跳跃能力 y 时, 它能跳不超过 y 的距离。

请问小青蛙的跳跃能力至少是多少才能用这些石头上完 x 次课。

观察得到:y单调,即y越大越可能满足来回2x的条件,使用搜索得出y的最小值

跳跃能力为y的时候来回2x次 等价 所以长度为y的区间中石头高度之和大于等于2x,用前缀和数组来处理

发现小于2x的,返回false,代码实现

    int r=l+mid-1;
    if(pre[r]-pre[l-1]<2*x)
    return false;

完整代码

#include <iostream>
using namespace std;

int n,x;
int river[100000],pre[100000];
bool check(int mid)
{
    for(int l=1;l<=n-mid;l++)
    {
        int r=l+mid-1;
        if(pre[r]-pre[l-1]<2*x)
        return false;
    }
    return true;
} 

int main()
{
    cin>>n>>x;
    for(int i=1;i<=n-1;i++)
    {
        cin>>river[i];
        pre[i]=pre[i-1]+river[i];
    }
    int l=1,r=n,ans;
    while(l<=r)
    {
        int mid=(l+r)/2;
        if(check(mid))
          ans=mid,r=mid-1;
          else
          l=mid+1;
    }
    cout<<ans<<endl;
    return 0;
}

 

标签:pre,过河,int,2x,青蛙,石头,跳跃
From: https://www.cnblogs.com/weinan030416/p/17058561.html

相关文章

  • 算法--旅行者过河问题
    1.题目在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够......
  • C语言使用递归解决青蛙跳台阶问题
    /*//青蛙跳台阶问题---一只青蛙一次可以跳一级台阶也可以跳两级如果青蛙跳上n级台阶有几种跳法    //n级台阶 跳法    // 1   1 ......
  • 青蛙过河算法
    Asmallfrogwantstogettotheothersideofariver.Thefrogisinitiallylocatedononebankoftheriver(position0)andwantstogettotheoppositeba......
  • 不要作温水里的那只青蛙
    身处逆境,往往比身处顺境更容易使我们获得成功。身处逆境时,我们往往会想着如何去战胜环境,去战胜别人,战胜某一个具体的困难;而身处顺境时,生活仿佛一下子没有了目标,在我们的眼......
  • 脑筋急转弯-2498. 青蛙过河 II
    2498.青蛙过河IIDescriptionDifficulty:中等RelatedTopics:给你一个下标从0 开始的整数数组 stones ,数组中的元素 严格递增 ,表示一条河中石头的位置。一只......
  • poj 1061f「一本通 6.4 例 1」青蛙的约会
    sloj P10209.「一本通6.4例1」青蛙的约会题目描述原题来自:POJ1061两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条......
  • 借船过河:一个据说能看穿你的人性和欲望的心理测试
    借船过河:一个据说能看穿你的人性和欲望的心理测试一男人M要与未婚妻F相会结婚,但两人一河相隔,M必须要借船过河才能见到F,于是他开始四处找船。 这时见一个女子L刚好......
  • P8775 [蓝桥杯 2022 省 A] 青蛙过河
    简要题意有一只青蛙在\(1\)处,有一些石头,位于\(2,3,4,\cdotsn\),它们的高度是\(H_2,H_3,\cdots,H_n\)。青蛙每落一次石头,该石头的高度就会\(-1\),直至高度为\(0\),此时......
  • P1002 过河卒 详细题解 搜索回溯+递归 [NOIP2002 普及组]
    题目描述棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方......
  • c语言实现【青蛙跳台阶问题】
    【青蛙跳台阶问题】c语言实现1.问题描述青蛙跳台阶问题是指:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。2.问题分析假设......