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

每日一题 Day(1)跳石头

个人主页:小则又沐风

个人专栏:<数据结构>

<竞赛专栏>

<C语言>

下面在讲解今天的算法题目的时候,我来想说明一下这个专题的讲解前提.

首先我会对这道题进行分析,然后讲解算法原理,最后讲解代码是怎么实现的.

题目:跳石头

题目讲解:

通过读题目我们知道总共包含起点,终点共N+2个石头.

我们需要实现的是通过移走石头,让最短的跳跃距离最长.

题目就是如此.

算法原理:

在解决这道题的时候我们先直接暴力解题,看看我们有什么思路能够解决这个问题.

我们就暴力枚举答案,我们知道最后的跳跃距离一定是在(1,L)中的一个数,

我们可以发现如果我们最短的跳跃距离在变大的话,我们需要移动的石头的个数也在上升,

相反跳跃距离减小的话我们需要移动的石头的个数就会下降.

所以我们可以画出下面的一个数轴.

我们假设最后我们的答案是x,那么在大于x的时候我们需要移动地石头个数一定是大于m的,

所以我们的答案一定是在左边.

当在x的左边的时候我们需要移动的石头的个数是小于等于m的,这时候我们的答案就是在这个点及其的右边的,

我们通过分析可以看出来,这个答案是具有二段性的,所以我们这道题目的算法思想就是二分答案.

我们通过设计一个函数cal(mid)来得到如果距离是mid的时候所需要移动的石头个数,

如果个数大于m的话left等于mid-1,

如果个数小于等于m的话left等于mid

以上我们算法的核心逻辑就实现了,下面我们来思考如何来实现这个cal函数,

我们来定义两个指针i,j计算这两个指针之间的距离如果距离小于我们的最小距离,那么我们需要删除的石头的个数++,此时j++,i不动直到找到了大于等于的位置,这时i移动到j的位置.

代码实现:

#include<iostream> using namespace std; typedef long long ll; const int N=5e4+10; ll a[N]; ll l,n,m; ll cal(ll x) { ll ret=0; int i=0,j=1; while(j<=n) { if(a[j]-a[i]<x) { j++; ret++; }else { i=j; j++; } } return ret; } int main() { cin>>l>>n>>m; for(int i=1;i<=n;i++) { cin>>a[i]; } a[n+1]=l; n++; int left=1,right=l; while(left<right) { ll mid=(left+right+1)/2; if(cal(mid)>m) { right=mid-1; } if(cal(mid)<=m) { left=mid; } } cout<<left<<endl; return 0; }

今天的每日一题到此结束.

http://www.jsqmd.com/news/458033/

相关文章:

  • WinForm界面开发之酒店管理系统--开篇
  • 谈表达式树的缓存():五种缓存方式的性能比较
  • 2026年细聊时代蜂族车位代理销售,合作模式是否合理及车位交通情况 - 工业推荐榜
  • Tauri 项目实践:客户端与 Web 端的授权登录实现方案
  • 开源 - 轻型的表达式引擎 Flee
  • 基于Matlab的并联三相逆变器主从控制策略建模仿真研究
  • Web标准的未来,浏览器的未来,应用的未来。
  • 2026年江苏好用的排烟净化设备,品牌选购攻略 - mypinpai
  • 跨境卖家如何用订单结构调整提升整体毛利
  • 北京俱乐部第三次技术活动
  • 三十载氟硅涂层深耕路,江苏维凯铸就中国智造新高度 - 资讯焦点
  • IACheck:AI报告文档审核助力汽车零部件车规级检测报告精准无误
  • 一个日志框架的开源,有些不错的创意。
  • 氧化镁市场新势力:2026年优质源头厂家排行,靠谱的氧化镁推荐博仕佶镁专注产品质量 - 品牌推荐师
  • 请讨论分层,而不是三层
  • Google wave 的技术分析- Google 企业应用的桥头堡(Web . in Ente
  • 人工智能与人类:未来写作的协同之路
  • 前端性能分析工具:dynaTrace Ajax Edition
  • 2026上海装修公司年轻人消费偏好调研报告:Z世代装修选择趋势 - 资讯焦点
  • Visual C# 新特性之dynamic类型
  • 比话降AI使用体验:知网AIGC检测专精工具值不值得买?
  • [原创]WCF技术剖析之十一:异步操作在WCF中的应用(上篇)
  • 2026 企业级 AI Agent 选型指南:从功能闭环到安全合规的深度架构拆解
  • 再互动解读雪花啤酒扫码领红包活动的“C端+B端”双轮驱动 - 品牌智鉴榜
  • 从零到一:Django Web 开发全流程实战(保姆级图文教程)
  • jQuery插件开发 - 其实很简单
  • Acrel-2000 电力监控系统 全维监控控配电 ATU 一键顺控实现无人值守
  • 每月加到1000元!这不只是养老金,是国家给咱老农民补发的“迟到工分”
  • 阶段三:CIPA 双流多模态模型 C++ TensorRT 边缘部署总结
  • EPLAN老司机教你玩转万能部件库