当前位置: 首页 > news >正文

蓝桥杯 Java 青蛙过河

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改/**二分法从大(n)到小找足够小的步长前缀和记录每个位置的前面有的总石头数(一个石头表示可以容纳一个青蛙,一位置有多少个石头hi就是多少),方便计算相当于2x个青蛙从起点到终点起点0个石头,终点无数个石头,代表可以容纳无数个青蛙检查步长是否符合要求:对每个点检查如果这个点能跳到的区域内的石头数够2x(也就是下一步可以容纳2x个青蛙)(这一步用两个前缀和相减获得)如果当前点的可跳区域包含终点就相当于可以直接到终点,而前面肯定是算了可以到当前点的举例:按题目意思h就为0 1 0 1 0 INF前缀和就为0 1 1 2 2 INF如果步长为2那么先检查索引为0的点0 1 2 3 4 5可跳点为 1 2该区域总石头数为 1 - 0 = 1 < 2x也就是说青蛙如果在索引为0的点以当前步长能力无法跳到下一区域如果步长为4那么先检查索引为0的点0 1 2 3 4 5可跳点为 1 2 3 4该区域总石头数为 2 - 0 = 2 = 2x也就是说青蛙如果在索引为0的点以当前步长能力能跳到下一区域检查索引为1,该点可以直接跳到终点所以步长为4可以优化:前缀和不用考虑终点,终点直接利用长度判定即可
*/
public class Main {static int n,x;static int[] q;public static void main(String[] args) {Scanner scan = new Scanner(System.in);n = scan.nextInt();x = scan.nextInt();q = new int[n];for(int i = 1;i < n;i++)q[i] = scan.nextInt() + q[i-1];int l=0;int r=n;// 二分法提高寻找最小区间(步长k=l)的效率while(l < r) {//如果该步长符合要求——该步长内的所有连续区间承受的跳跃次数>2*x//则缩小kint mid = (l + r)/2;if(check(mid))r = mid;//反之,扩大kelsel = mid + 1;}//直到找到理论上最小就可以满足的步长K(==l)System.out.print(l);scan.close();}private static boolean check(int k) {//遍历所有步长为k的连续区间for(int i=0;i<n-k;i++)if(q[i+k]-q[i]<2*x)return false;return true;}
}

http://www.lryc.cn/news/204455.html

相关文章:

  • 雷达图应该如何去绘制?
  • 1024 蓝屏漏洞攻防战(第十九课)
  • 短视频矩阵系统软件源码
  • 内网穿透的应用-如何通过TortoiseSVN+内网穿透,实现公网提交文件到内网SVN服务器?
  • 有没有PC端的配音软件推荐?(免下载)
  • clickhouse
  • linux下创建文件夹软链接
  • 常用的工具网站
  • 号外!百度Comate代码助手全新上线SaaS服务 - 免费申请试用+深入教程解读!
  • AUTOSAR通信篇 - CAN网络通信(七:Nm)
  • CentOS 7 中安装Kafka
  • Centos 7 部署Docker CE和docker-compose教程
  • 【数据结构】模拟实现无头单向非循环链表
  • linux驱动开发学习001:概述
  • 安全响应中心 — 垃圾邮件事件报告(10.13)
  • 扩散模型Diffusers Pipeline API使用介绍
  • el-date-picker 组件 监听输入的内容 并按照时间格式 格式化
  • 组件通信$refs | $parent |$root
  • springboot中@Async的使用
  • 学C++从CMake学起
  • lv8 嵌入式开发-网络编程开发 20 域名解析与http服务实现原理
  • 只要路由器有WPS按钮,佳能打印机连接到Wi-Fi网络的方法就很简单
  • Cmake输出git内容方式
  • 实现多余内容变成省略号
  • WAL 模式(PostgreSQL 14 Internals翻译版)
  • 2023年信息科学与工程学院学生科协第二次软件培训
  • 渗透测试tomcat错误信息泄露解决办法
  • notes_NLP
  • 内存分段、分页
  • Python-pptx教程之一从零开始生成PPT文件