二分答案 蓝桥杯 2022 省A 青蛙过河

有些地方需要解释:
1.从学校到家和从家到学校,跳跃都是一样的,直接看作2*x次过河就可以。        
2.对于一个跳跃能力 y,青蛙能跳过河 2x 次,当且仅当对于每个长度为 y 的区间,这个区间内 h 的和都大于等于 2x。

思路分析

  1. 首先定义了一个辅助函数 check,用于检查是否存在一种跳跃能力满足要求。该函数接受三个参数:跳跃能力 x、石头高度数组 arr 和总共需要跳跃的距离 all
  2. 主函数开始时,读入河的宽度 n 和小青蛙需要去学校的天数 x,并将 x 转换为实际过河的次数。
  3. 接着读入每块石头的高度,并初始化二分查找的左右边界。
  4. 使用二分查找来找到最低的跳跃能力,使得小青蛙能够按要求过河。二分查找的左边界为1,右边界为 n-1
  5. 在二分查找的过程中,调用 check 函数检查当前跳跃能力是否满足要求,如果满足则更新最低跳跃能力,并将右边界调整为 mid-1,否则将左边界调整为 mid+1
  6. 最终输出最低跳跃能力。
#include<iostream>
#include<bits/stdc++.h>
using namespace std;int n;//河的长度// 辅助函数:检查是否存在一种跳跃能力满足要求
int check(int x, int arr[], int all) {int now = 0; // 初始化小青蛙的位置// 模拟小青蛙的跳跃过程for(int i = 0; i < x; i++) {now += arr[i]; // 跳到下一个石头或河岸上}// 如果小青蛙无法跳到河的对岸,返回0if(now < all)return 0;// 继续模拟小青蛙的跳跃,判断是否能成功到达河的对岸for(int i = x; i < n; i++) {now += arr[i]; // 跳到下一个石头或河岸上now -= arr[i - x]; // 减去前一个石头的高度,保持距离为xif(now < all) // 如果无法成功到达河的对岸,返回0return 0;}// 能够成功到达河的对岸,返回1return 1;
}int main() {int x;cin >> n >> x; // 读取河的宽度和小青蛙需要去学校的天数x *= 2; // 实际过河的次数为2倍天数int arr[n];for(int i = 0; i < n - 1; i++) // 读取每块石头的高度cin >> arr[i];int mid, ans = n;int left = 1, right = n; // 初始跳跃能力范围为[1, n]n = n - 1; // 更新河的宽度为石头数量// 使用二分查找来找到最低的跳跃能力,使得小青蛙能够按要求过河while(left <= right) {mid = (left + right) / 2;if(check(mid, arr, x) == 1) {ans = mid; // 更新最低跳跃能力right = mid - 1;} elseleft = mid + 1;}// 输出最低跳跃能力cout << ans;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/596307.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

并发编程01-深入理解Java并发/线程等待/通知机制

为什么我们要学习并发编程&#xff1f; 最直白的原因&#xff0c;因为面试需要&#xff0c;我们来看看美团和阿里对 Java 岗位的 JD&#xff1a; 从上面两大互联网公司的招聘需求可以看到&#xff0c; 大厂的 Java 岗的并发编程能力属于标配。 而在非大厂的公司&#xff0c; 并…

安卓主板MT8390(Genio 700)_MTK联发科Linux开发板方案

MediaTek Genio 700 &#xff08;MT8390&#xff09;是一款高性能的边缘 AI 物联网平台&#xff0c;专为智能家居、互动零售、工业与商业应用而设计。提供快速响应的边缘计算能力、先进的多媒体功能、广泛的传感器和连接方式&#xff0c;且支持多任务操作系统。 MT8390安卓核心…

C# 委托的基础应用

一、Action 和 Func 的使用。 二、自定义委托&#xff1a; 完整的使用代码示例&#xff1a; 三、委托的一般使用 模板方法&#xff1a; 回调方法&#xff0c;在模板方法的基础上进行添加。

基于Vision Transformer的迁移学习在乳腺X光图像分类中的应用

乳房X线摄影(MG)在乳腺癌的早期发现中起着重要作用。MG可以在早期阶段发现乳腺癌&#xff0c;即使是感觉不到肿块的小肿瘤。基于卷积神经网络(CNN)的DL最近吸引了MG的大量关注&#xff0c;因为它有助于克服CAD系统的限制(假阳性、不必要的辐射暴露、无意义的活组织检查、高回调…

C++面向对象程序设计 - 对象指针和this指针

在C学习中&#xff0c;指针是一个用于指向另一个变量的地址的变量。理解指针有一定难度&#xff0c;但是理解它的工作原理后&#xff0c;会发现它们是非常强大和有用的工具。指针可以用来指向一般的变量&#xff0c;也可以指向对象。 一、指向对象的指针 在建立对象时&#xf…

ARM v8 Cortex R52内核 02 程序模型 Programmers Model

ARM v8 Cortex R52内核 02 程序模型 Programmers Model 2.1 关于程序模型 Cortex-R52处理器实现了Armv8-R架构。这包括&#xff1a; 所有的异常级别&#xff0c;EL0-EL2。 每个异常级别下的AArch32执行状态。 T32和A32指令集&#xff0c;其中包括&#xff1a; 浮点运算。 …

文件的随机读写--fseek,ftell,拷贝文件

想要查看fseek&#xff0c;ftell&#xff0c;函数&#xff0c;请登录这个网站&#xff1a; cplusplus.com - The C Resources Networkhttps://legacy.cplusplus.com/ 还有一个函数没有写出来&#xff0c;是rewind&#xff0c;它是&#xff1a;让⽂件指针的位置回到⽂件的起始位…

java.lang.NoClassDefFoundError: javax/validation/constraints/Min

1、报错截图 2、解决办法 添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>

论文润色康康我

想象一下&#xff0c;当您埋头苦干&#xff0c;终于完成了一篇研究论文或商业报告&#xff0c;那份成就感无疑是巨大的。然而&#xff0c;文章的完成只是第一步&#xff0c;如何让文章在众多作品中脱颖而出&#xff0c;才是摆在每一位作者面前的挑战。这时&#xff0c;意得辑的…

常见的加密方式总结(哈希算法、对称、非对称)

哈希算法是一种用数学方法对数据生成一个固定长度的唯一标识的技术&#xff0c;可以用来验证数据的完整性和一致性&#xff0c;常见的哈希算法有 MD、SHA、MAC 等。 对称加密算法是一种加密和解密使用同一个密钥的算法&#xff0c;可以用来保护数据的安全性和保密性&#xff0…

智慧牧场数据 7

1 体征数据采集 需求:获取奶牛记步信息 三轴加速度测量&#xff1a;加速度测量计反应的加速向量与当前的受力方向是相反&#xff0c;单位为g 陀螺仪&#xff0c;是用来测量角速度的&#xff0c;单位为度每秒&#xff08;deg/s&#xff09; 2000deg/s 相当于1秒钟多少转 1.1…

9(10)-1(2)-CSS 布局模型+CSS 浮动

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 一、CSS 布局模型1 流动模型&#xff08;标准流&#xff09; 二、CSS 浮动1 浮…