码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 蓝桥杯 Java 青蛙过河


     

     

    1. import java.util.Scanner;
    2. // 1:无需package
    3. // 2: 类名必须Main, 不可修改
    4. /**
    5. 二分法从大(n)到小找足够小的步长
    6. 前缀和记录每个位置的前面有的总石头数(一个石头表示可以容纳一个青蛙,一位置有多少个石头hi就是多少),方便计算
    7. 相当于2x个青蛙从起点到终点
    8. 起点0个石头,终点无数个石头,代表可以容纳无数个青蛙
    9. 检查步长是否符合要求:
    10. 对每个点检查
    11. 如果这个点能跳到的区域内的石头数够2x(也就是下一步可以容纳2x个青蛙)(这一步用两个前缀和相减获得)
    12. 如果当前点的可跳区域包含终点就相当于可以直接到终点,而前面肯定是算了可以到当前点的
    13. 举例:
    14. 按题目意思h就为
    15. 0 1 0 1 0 INF
    16. 前缀和就为
    17. 0 1 1 2 2 INF
    18. 如果步长为2
    19. 那么先检查索引为0的点
    20. 0 1 2 3 4 5
    21. 可跳点为 1 2
    22. 该区域总石头数为 1 - 0 = 1 < 2x
    23. 也就是说青蛙如果在索引为0的点以当前步长能力无法跳到下一区域
    24. 如果步长为4
    25. 那么先检查索引为0的点
    26. 0 1 2 3 4 5
    27. 可跳点为 1 2 3 4
    28. 该区域总石头数为 2 - 0 = 2 = 2x
    29. 也就是说青蛙如果在索引为0的点以当前步长能力能跳到下一区域
    30. 检查索引为1,该点可以直接跳到终点
    31. 所以步长为4可以
    32. 优化:
    33. 前缀和不用考虑终点,终点直接利用长度判定即可
    34. */
    35. public class Main {
    36. static int n,x;
    37. static int[] q;
    38. public static void main(String[] args) {
    39. Scanner scan = new Scanner(System.in);
    40. n = scan.nextInt();
    41. x = scan.nextInt();
    42. q = new int[n];
    43. for(int i = 1;i < n;i++)
    44. q[i] = scan.nextInt() + q[i-1];
    45. int l=0;
    46. int r=n;
    47. // 二分法提高寻找最小区间(步长k=l)的效率
    48. while(l < r) {
    49. //如果该步长符合要求——该步长内的所有连续区间承受的跳跃次数>2*x
    50. //则缩小k
    51. int mid = (l + r)/2;
    52. if(check(mid))
    53. r = mid;
    54. //反之,扩大k
    55. else
    56. l = mid + 1;
    57. }
    58. //直到找到理论上最小就可以满足的步长K(==l)
    59. System.out.print(l);
    60. scan.close();
    61. }
    62. private static boolean check(int k) {
    63. //遍历所有步长为k的连续区间
    64. for(int i=0;i
    65. if(q[i+k]-q[i]<2*x)
    66. return false;
    67. return true;
    68. }
    69. }

  • 相关阅读:
    A Philosophy of Software Design读书笔记——设计两次&写注释
    等待风起——京东.Vision项目参与实录分享
    C专家编程 第11章 你懂得C,所以C++不再话下 11.1 初识OOP
    扫雷游戏源码解析:构建你自己的MineSweeper
    Python学习基础笔记八——字典
    centos7中卸载Java、jdk命令
    深入理解MySQL:数据类型、查询优化、索引、事务处理和数据备份与恢复
    App移动端测试(10)—— Monkey自定义脚本案例
    云计算平台上的DevOps实践
    某大厂开发和测试干了一架,还用鼠标线勒脖子...
  • 原文地址:https://blog.csdn.net/weixin_45322373/article/details/134019271
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号