跳房子(ybtoj-单调队列)
文章目录
- 题目描述
- 解析
- 代码
- thanks for reading!
题目描述
洛谷传送门
跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一。
跳房子的游戏规则如下:
在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一条直线上。每个格子内有一个数字(整数),表示到达这个 格子能得到的分数。玩家第一次从起点开始向右跳,跳到起点右侧的一个格子内。第二次再从当前位置继续向右跳,依此类推。规则规定:
玩家每次都必须跳到当前位置右侧的一个格子内。玩家可以在任意时刻结束游戏,获得的分数为曾经到达过的格子中的数字之和。
现在小 R 研发了一款弹跳机器人来参加这个游戏。但是这个机器人有一个非常严重的缺陷,它每次向右弹跳的距离只能为固定的 d 。小 R 希望改进他的机器人,如果他花 g 个金币改进他的机器人,那么他的机器人灵活性就能增加 g ,但是需要注意的是,每 次弹跳的距离至少为 1 。具体而言,当 g<d 时,他的机器人每次可以选择向右弹跳的距离为 d-g,d-g+1,d-g+2d,…, d+g-2 , d+g-1, d+gd+g ;否则(当 g≥d 时),他的机器人每次可以选择向右弹跳的距离为 1, 2 , 3 ,…, d+g-2 , d+g-1 , d+g。
现在小 R 希望获得至少 k 分,请问他至少要花多少金币来改造他的机器人。
输入格式
第一行三个正整数 n , d , k ,分别表示格子的数目,改进前机器人弹跳的固定距离,以及希望至少获得的分数。相邻两个数 之间用一个空格隔开。
接下来 n 行,每行两个整数 xi,si ,分别表示起点到第 i 个格子的距离以及第 ii 个格子的分数。两个数之间用一个空格隔开。保证 x i按递增顺序输入。
输出格式
共一行,一个整数,表示至少要花多少金币来改造他的机器人。若无论如何他都无法获得至少 k 分,输出 −1 。
解析
其实不算太难
就是一个滑动窗口的题的改版
细节处理的不够好:
1.二分的上界应该是距离的最大值而不是n!
2.因为s可能很大,所以数组下标不能存具体的s值,而是一个求序号!
代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=550050;
int n,d,kk;
int pl[N],v[N];ll dp[N];//dp存序号
ll q[N],st,ed,npl;
bool check(int k){dp[0]=0;for(int i=1;i<=n;i++) dp[i]=-2e15;st=1,ed=0,npl=0;int l1=d+k,l2=max(1,d-k);for(int i=1;i<=n;i++){while(st<=ed&&pl[q[st]]<pl[i]-l1) st++;while(pl[npl]<=pl[i]-l2&&npl<=n){if(pl[npl]<pl[i]-l1){npl++;continue;}while(st<=ed&&dp[q[ed]]<=dp[npl]) ed--;q[++ed]=npl;npl++;}if(st>ed) dp[i]=-2e15;else dp[i]=dp[q[st]]+v[i];} for(int i=1;i<=n;i++){// printf("i=%d dp=%d\n",i,dp[i]);if(dp[i]>=kk) return true;}return false;
}int main(){scanf("%d%d%d",&n,&d,&kk);for(int i=1;i<=n;i++) scanf("%d%d",&pl[i],&v[i]);check(100);int sst=0,eed=pl[n]+1;while(sst<eed){int mid=(sst+eed)>>1;
// printf("**ed=%d\n",ed);if(check(mid)) eed=mid;else sst=mid+1;
// printf("mid=%d st=%d ed=%d\n",mid,st,ed);}// printf("st=%d\n",st);if(sst==n+1) printf("-1");else printf("%d",sst); return 0;
} /*
50 3 1
49 1 1
26 1 4
6 1 1010 3 1
3 1 1
7 3 2
1 6 5
*/
thanks for reading!
跳房子(ybtoj-单调队列)相关推荐
- 洛谷P3957 跳房子(玩转单调队列)
传送门:跳房子 一.题目描述 二.解题思路 1)分析题目 题意:机器人开始时在0的位置,总共有k个格子,每个格子的分数为,每个格子与原点的距离为 当花费g个金币后,机器人能跳的距离为,也就是说机器 ...
- Ybtoj 最优密码 单调队列(浅谈)树状数组 两种解法
作者:hsez_yyh 链接:https://blog.csdn.net/yyh_getAC/article/details/123956399 来源:湖北省黄石二中竞赛组 著作权归作者所有.商业 ...
- 单调队列多重背包时间复杂度O(vn)
版权声明:本文为博主原创文章,未经博主允许不得转载. 多重背包问题: 有N种物品和容量为V的背包,若第i种物品,容量为v[i],价值为w[i],共有n[i]件.怎样装才能使背包内的物品总价值最大? 网 ...
- 洛谷 P2219修筑绿化带 二维单调队列~
题目链接:https://www.luogu.org/problem/P2219 emmm调了一个上午+中午,fan 题意:从N*M的中找到一个a*b的大矩形和减去a*b中的一个与之不重边界的c*d的 ...
- P2216 理想的正方形 单调队列 (二维)
题目链接:https://www.luogu.org/problem/P2216 题意:求给定n*m的矩形中所有k*k的正方形块中最大值最小值之差(极差)最小 哇,大神的思路真的很帅 单调队列对每一行 ...
- 点分治问题 ----------- luoguP2942 [WC2010]重建计划 [点分治 + bfs + 单调队列 + 预处理建树 + 二分 + 01分数规划]
题目链接 解题思路: 1.对于这个Avgvalue=∑e∈sv(e)∣s∣Avgvalue = \frac{\sum_{e\in s}v(e)}{|s|}Avgvalue=∣s∣∑e∈sv(e) ...
- 解题报告:Fake Maxpooling(单调队列求矩阵的和)
我们不妨先把这个问题中二维的矩阵简化成一维的数列.那么现在的问题就变成了一个求连续的滑动窗口最值问题:给出一个长度为n的数列和一个长度为k(k<n)的窗口,记录滑动窗口位于每个位置下的下的最大值 ...
- 0x12.基本数据结构 — 队列与单调队列
目录 一.队列 0.UVA540 团体队列 Team Queue 1.AcWing 133. 蚯蚓(模拟优先队列) 二 .单调队列 0.AcWing 135. 最大子序和(单调队列) 1.luogu ...
- 【题解】P1419 寻找段落(二分+单调队列)难度⭐⭐⭐★
P1419 寻找段落 首先二分答案,即:二分最大平均值. 我们将a全部减去mid,问题转化为判断是否存在一个长度在s~t范围内的区间它的和为正,如果有说明还有更大的平均值. 用前缀和和单调队列维护. ...
- 【数据结构】单调栈和单调队列 详解+例题剖析
算法:单调栈和单调队列 一.单调栈和单调队列 二.单调栈例题 1.模板题入门 2.不懂不要急,看这道题 三.单调队列例题 1.入门 2.进阶 一.单调栈和单调队列 单调栈和单调队列与普通的栈,队列不同 ...
最新文章
- 不要依赖代码中的异常
- Go语言字典树定义及实现
- Android的沉浸式状态栏与变色状态栏详解
- 不定积分24个基本公式_不定积分计算—典型题及解题技巧
- 教程:Hibernate,JPA –第1部分
- 《AutoCAD 2014中文版超级学习手册》——1.4 配置绘图系统
- 谁在使用我的网站——用户分类
- Server.MapPath()用法
- java 编写浏览器_用Java自己写一个浏览器 —— JavaFX 入门
- 拼多多商家刚开店,哪些行为不能做?
- 英语计算机的读音,井号'#'用英语怎么说(计算机字符 - 英文读音)
- 计算机组成原理之概述篇(一)
- 非遗在线商城小程序(后台PHP开发)
- What are 20 questions to detect fake data scientists?
- Python中程序的基本结构
- 信号与槽的Connect详解
- IDEA无法自动导包问题
- 凡客“小米化”改造:雷军与陈年最基友的商业故事
- 成双成对的数,怎么找到落单的那个
- 操作系统和磁盘分区及引导
热门文章
- 51单片机外部地址c语言,cx51与c语言对单片机内部和外部资源变量和地址的定义是否兼容?为什么...
- oracle 大页配置,【Oracle】Oracle如何开启大页
- php 重定向数据不丢失,PHP重定向如何实现数据不丢失?
- .net html5页面缓存,详解HTML5中的manifest缓存使用
- qtabwidget设置tab高度_VC|富文本编辑框CRichEditCtrl的字体与段落设置
- 香肠派对电脑版_香肠派对先行服s7赛季下载-香肠派对先行服s7赛季最新版下载...
- 怎么用ai做出适量插画_怎么用最简单的方法,做出最炫酷的数据可视化图表?...
- krc 编辑 linux,Linux网络编程
- 游戏设计与计算机,RPG游戏设计与实现-数学与计算机系.doc
- aspose excel中文文档_除了VBA,还有哪些编程语言可以操作Excel文件?