蓝桥杯——青蛙过河(JAVA)

2023-10-26

题目:

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

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

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

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

输入格式

输入的第一行包含两个整数 n,x, 分别表示河的宽度和小青蛙需要去学校 的天数。请注意 2x 才是实际过河的次数。

第二行包含 n−1 个非负整数H1​,H2​,⋯,Hn−1​, 其中Hi​>0 表示在河中与 小青蛙的家相距 i 的地方有一块高度为 Hi​ 的石头, Hi​=0 表示这个位置没有石 头。

输出格式

输出一行, 包含一个整数, 表示小青蛙需要的最低跳跃能力。

样例输入

5 1
1 0 1 0

样例输出

4

样例说明

由于只有两块高度为 1 的石头,所以往返只能各用一块。第 1 块石头和对岸的距离为 4,如果小青蛙的跳跃能力为 3 则无法满足要求。所以小青蛙最少需要 4 的跳跃能力。

评测用例规模与约定

对于30% 的评测用例, n≤100;

对于 60% 的评测用例, n≤1000;

对于所有评测用例, 1≤n≤105,1≤x≤109,1≤Hi​≤104 。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M

代码: 

import java.util.Scanner;

public class Main {
    static int n,x;                  //河的宽度和上学的天数
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int sum=0;
        n=sc.nextInt();
        x=sc.nextInt();
        int[] H=new int[n];          //储存石头的位置以及高度
        int[] b=new int[n];          //储存每块石头之前可以跳跃的次数
        for (int i=1;i<n;i++){
            H[i]=sc.nextInt();
            sum+=H[i];
            b[i]=sum;
        }
        int left=1,right=n,middle,S=0;  //二分法查找最小跳跃距离
        while(left<=right){
            middle=left+right>>1;       //>>是位运算符X+Y>>1相当于(X+Y)/2
            if (check(middle,b)){
                S=middle;

                right=middle-1;

            }else {
                left=middle+1;

            }

        }
        System.out.println(S);
        sc.close();
    }

    private static boolean check(int middle, int[] b) {   //查b集合的每个区间是否都有至少2*x个落脚点。
        for (int i=1;i+middle<=n;i++){
            if (b[i+middle-1]-b[i-1]<2*x){
                return false;
            }
        }
        return true;
    }
}

思路:这道题用了二分法的查找方法。

1.我们先进行一个转换,1只小青蛙去x天学校总共需要往返2*x次,转化为2*x只小青蛙过一次河。

2.我们将每块石头及之前石头可以跳跃的次数储存起来,以题目中给的例子为例,b[1]=1,b[2]=1,b[3]=2,b[4]=2。

3.采用二分法找最少跳跃距离,再一次次将midder(跳跃距离)在b集合的区间里找是否所有的区间都可以满足至少有2*x个落脚点(每次青蛙跳离一块石头后,之后的距离区间都要保证有2*x个落脚点,否则就会有青蛙跳不过去,所以要将所有区间都进行比较),如果可以先将midder储存起来(因为可能有更小的跳跃距离),再用二分法逐步比较,直到二分结束输出最终的最小跳跃距离。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯——青蛙过河(JAVA) 的相关文章

随机推荐

  • 后缀名为.phps的文件

    文章目录 前言 一 phps是什么 二 使用情场景 三 其他使用场景 前言 遇到名为index phps的文件 不明白 phps代表什么意思 这里记录一下 一 phps是什么 phps即为 PHP Source PHP Source 由 T
  • DCDC基础(3)--BUCK电路的电感选型

    最近开通了公众号 射频工程师的日常 有文章更新 可以关注一下 谢谢 上一节带大家了解了一下BUCK电路的反馈电阻和自举电容的问题 从原理上分析了下组成BUCK电路的各个元器件的作用 又有人问了 面试中经常被问到BUCK的功率电感怎么选型 电
  • 多线程基础

    文章目录 1 线程简介 1 1 多任务 1 2 多线程 1 2 1 普通方法调用和多线程 1 3 程序 进程 线程 1 3 1 Process与Thread 1 4 核心概念 2 线程实现 2 1 三种创建方式 2 1 1 Thread 2
  • 阿里的easyExcel导出

    easyExcel的gitHub地址 https github com alibaba easyexcel 开发环境 springboot 1 导入依赖
  • 如何在thinkphp5.1中写接口及接口调用

    在thinkphp5 1中如何写接口及如何调用接口 对于php不熟悉的人来说 解除thinkphp还是挺有难度的 下面记录如何编写接口 及如何对编写的接口进行调用 1 首先在thinkphp中的application中的api contro
  • 毕业设计-基于深度学习的安全帽智能识别系统

    目录 前言 课题背景和意义 实现技术思路 一 系统架构 二 基于深度学习的目标检测算法实现 三 交互设计与实现 四 基于深度学习的安全帽智能识别系统测试 五 总结 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或
  • SecureCRT 访问Linux虚拟机(Oracle VM VirtualBox) 返回超时密码错误 解决办法

    问题描述 虚拟机ip能ping通 SecureCRT就是链接不上 解决办法 在找了网上无数多的办法 并没有成功 ssh重启 修改权限 1 设置Oracle VM VirtualBox网络方式 2 进入系统检查ssh 转载 http blog
  • 分享一个python基于数据可视化的智慧社区服务平台源码

    作者 计算机源码社 个人简介 本人七年开发经验 擅长Java Python PHP NET Node js 微信小程序 爬虫 大数据等 大家有这一块的问题可以一起交流 学习资料 程序开发 技术解答 文档报告 JavaWeb项目 微信小程序项
  • 【华为OD机试真题 JAVA】两数之和绝对值最小

    JS版 华为OD机试真题 JS 两数之和绝对值最小 标题 两数之和绝对值最小 时间限制 1秒 内存限制 32768K 语言限制 不限 给定一个从小到大的有序整数序列 存在正整数和负整数 数组 nums 请你在该数组中找出两个数 其和的绝对值
  • CSAPP第二章课后作业题

    include
  • 2020最新字节跳动面试经验分享,已拿到offer (4轮技术面+hr面)

    随着秋招的开启 不管是应届毕业生找工作 还是在职程序员跳槽去找更高薪水的工作 都要面临面试这一难关 应对面试不仅需要丰富的项目经历 还需要牢固的基础知识 在这里 跟大家分享一下我面试字节跳动的经验 包括4轮技术面 hr面 希望对大家有帮助
  • STM32 软件仿真失败 ***** error 65: access violation at 0x40021000 : no ****'read' permission******

    在使用STM32进行软件仿真时 可能会遇到很多问题 最常见的当然如标题所示 STM32 软件仿真失败 no read permission 还有其他很多问题比如 error 35 undefined line number BS Templ
  • react性能优化

    写在前面的话 要想解决问题 首先得找到问题的根源 所以 说起性能分析 还是要从其生命周期和渲染机制说起 1 渲染机制 react的组件渲染分为初始化渲染和更新渲染 在初始化渲染的时候会调用根组件下的所有组件的render方法进行渲染 但是当
  • Eclipse连接Hadoop集群(详细版)

    颜子之不较 孟子之自反 是贤人处横逆之方 子贡之无谄 原思之坐弦 是贤人守贫穷之法 相关连接 HDFS相关知识 Hadoop分布式文件系统 HDFS 快速入门 Hadoop分布式文件系统 HDFS 知识梳理 超详细 Hadoop集群的安装与
  • 人生苦短,我学python

    人生苦短我学python 一个python小白的入门之路 初识Python 刚开始学python是在今年七月 对python的第一印象就是短小而又精悍 变量无需定义即可使用 数不清的大大小小的库信手拈来 笔者以为 python的语法与mat
  • 华为OD机试真题-最长连续子序列-2023年OD统一考试(B卷)

    题目描述 有N个正整数组成的一个序列 给定整数sum 求长度最长的连续子序列 使他们的和等于sum 返回此子序列的长度 如果没有满足要求的序列 返回 1 输入描述 序列 1 2 3 4 2 sum 6 输出描述 序列长度 3 补充说明 输入
  • HJ29 字符串加解密

    描述 1 对输入的字符串进行加解密 并输出 2 加密方法为 当内容是英文字母时则用该英文字母的后一个字母替换 同时字母变换大小写 如字母a时则替换为B 字母Z时则替换为a 当内容是数字时则把该数字加1 如0替换1 1替换2 9替换0 其他字
  • 使用ffmpeg实现给音频,视频添加水印的操作

    本文主要针对ffmpeg进行整理 从而解决在现实中可能存在的问题 1 下载配置ffmpeg 这里参考的是 Java后台用ffmpeg命令给视频添加水印 身后有尾巴 博客园 cnblogs com 1 先去ffmpeg官网下载其压缩包 Dow
  • ElasticSearch详细笔记( 从入门到入土)

    文章目录 1 ElasticSearch概述 1 1 Elasticsearch 是什么 1 2 全文搜索引擎 1 3 Elasticsearch And Solr 2 ElasticSearch安装 2 1 下载和安装 2 2 可能存在的
  • 蓝桥杯——青蛙过河(JAVA)

    题目 小青蛙住在一条河边 它想到河对岸的学校去学习 小青蛙打算经过河里 的石头跳到对岸 河里的石头排成了一条直线 小青蛙每次跳跃必须落在一块石头或者岸上 不过 每块石头有一个高度 每次小青蛙从一块石头起跳 这块石头的高度就 会下降 1 当石