机器人跳跃问题

机器人正在玩一个古老的基于 DOS 的游戏。

游戏中有 N + 1 N+1 N+1 座建筑——从 0 0 0 到 N N N 编号,从左到右排列。

编号为 0 0 0 的建筑高度为 0 0 0 个单位,编号为 i i i 的建筑高度为 H ( i ) H(i) H(i) 个单位。

起初,机器人在编号为 0 0 0 的建筑处。

每一步,它跳到下一个(右边)建筑。

假设机器人在第 k k k 个建筑,且它现在的能量值是 E E E,下一步它将跳到第 k + 1 k+1 k+1 个建筑。

如果 H ( k + 1 ) > E H(k+1)>E H(k+1)>E,那么机器人就失去 H ( k + 1 ) − E H(k+1)-E H(k+1)−E 的能量值,否则它将得到 E − H ( k + 1 ) E-H(k+1) E−H(k+1) 的能量值。

游戏目标是到达第 N N N 个建筑,在这个过程中能量值不能为负数个单位。

现在的问题是机器人至少以多少能量值开始游戏,才可以保证成功完成游戏?

输入格式

第一行输入整数 N N N。

第二行是 N N N 个空格分隔的整数, H ( 1 ) , H ( 2 ) , … , H ( N ) H(1),H(2),…,H(N) H(1),H(2),…,H(N) 代表建筑物的高度。

输出格式

输出一个整数,表示所需的最少单位的初始能量值上取整后的结果。

数据范围

1 ≤ N , H ( i ) ≤ 1 0 5 1 \le N,H(i) \le 10^5 1≤N,H(i)≤105,

输入样例1:

5
3 4 3 2 4

输出样例1:

4

输入样例2:

3
4 4 4

输出样例2:

4

输入样例3:

3
1 6 4

输出样例3:

3

代码1 暴力做法

#include<iostream>
#include<cmath>
using namespace std;
int n;
const int N = 1e5 + 10;
int a[N];
bool check(int k) {for (int i = 1; i <= n; i++) {k = 2 * k - a[i];if (k < 0) return 0;if (k > 1e5) return 1;}return 1;
}
int main() {scanf("%d", &n);for (int i = 1; i <= n; i++) scanf("%d", &a[i]);for (int i = 1;; i++) {if (check(i)) {cout << i;return 0;}}
}

代码2 二分做法

#include<iostream>
#include<cmath>
using namespace std;
int n;
const int N = 1e5 + 10;
int a[N];
bool check(int k) {for (int i = 1; i <= n; i++) {k = 2 * k - a[i];if (k < 0) return 0;if (k > 1e5) return 1;}return 1;
}
int main() {scanf("%d", &n);for (int i = 1; i <= n; i++) scanf("%d", &a[i]);int l = 0, r = 1e5;while (l < r) {int mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}printf("%d", l);return 0;
}

知识点

二分

【今日头条2019,笔试题】机器人跳跃问题相关推荐

  1. 今日头条2019年笔试题 机器人跳跃问题

    机器人跳跃问题 机器人正在玩一个古老的基于 DOS 的游戏. 游戏中有 N+1 座建筑--从 0 到 NN编号,从左到右排列. 编号为 0 的建筑高度为 0 个单位,编号为 i 的建筑高度为 H(i) ...

  2. 牛客《今日头条》笔试题

    最后一题 或与加 如果x+y=x|y 表示x y满足或与加 要求,输入两个数x,k,输出 第k小的y: 示例 输入 5 1 输出2,由于 5+1!=5|1 ,因此第一小的数为2 分析:显然满足x+y= ...

  3. 今日头条2017笔试题之出题数量

    题目:出题数量 一些出题人出了 n 道题,每道题有一个难度系数,难度系数满足以下关系的 3 道题可以组 成一套试卷,为了使这 n 道题使用上且只能使用一次,问出题人最少还要出多少题? a<=b& ...

  4. 惊了!原来这就是今日头条的面试题!

    最近收到了一个大兄弟念叨,说他去面了今日头条,一路下来感觉自己还是蛮顺畅的,然后顺带给我大致说了一下今日头条的面试题. 顺便插个话,想要拥有百次面试的磨练吗,想要的小伙伴可以戳这里暗号:CSDN即可拥 ...

  5. 2020年开春最新面试!今日头条 Android 面试题及答案 (已拿到 offer)

    面试时间:2019.12.29 1~3面.2020.1.03 4~6面.2020.1.06 HR面 面试部门 + 岗位:商业化 - 高级 Android 开发工程师 面试感想:整体面得比较累,基础面. ...

  6. 今日头条的面试题:LRU原理和Redis实现

    很久前参加过今日头条的面试,遇到一个题,目前半部分是如何实现 LRU,后半部分是 Redis 中如何实现 LRU. 我的第一反应是操作系统课程里学过,应该是内存不够的场景下,淘汰旧内容的策略.LRU ...

  7. LRU原理和Redis实现——一个今日头条的面试题

    很久前参加过今日头条的面试,遇到一个题,目前半部分是如何实现 LRU,后半部分是 Redis 中如何实现 LRU. 我的第一反应是操作系统课程里学过,应该是内存不够的场景下,淘汰旧内容的策略.LRU ...

  8. 分享一个今日头条的面试题——LRU原理和Redis实现

    很久前参加过今日头条的面试,遇到一个题,目前半部分是如何实现 LRU,后半部分是 Redis 中如何实现 LRU. 我的第一反应该是内存不够的场景下,淘汰旧内容的策略.LRU ... Least Re ...

  9. LRU原理和Redis实现——一个今日头条的面试题(转载)

    很久前参加过今日头条的面试,遇到一个题,目前半部分是如何实现 LRU,后半部分是 Redis 中如何实现 LRU. 我的第一反应是操作系统课程里学过,应该是内存不够的场景下,淘汰旧内容的策略.LRU ...

最新文章

  1. java现有一个泛型类 提供数组排序功能,java编程思想读书笔记 第十六章 数组
  2. sendStickyBroadcast和sendStickyOrderedBroadcast
  3. Docker Remote API v1.12使用
  4. LeetCode (2) - swift 实现数组 加一
  5. springboot官网-pom.xml文件
  6. 数据结构与算法之KMP算法
  7. linux网络编程之SCTP套接字常用接口
  8. UOJ284 快乐游戏鸡(树上动态规划问题、长链剖分+单调栈)
  9. java标签用法详解_介绍一个javaWeb自定义标签的用法详解
  10. phpStudy下载安装+配置站点+You don't have permission to access / on this server错误解决
  11. 支付宝要给全国人民发100亿,7月1日起!
  12. 优化一个奇葩表设计上的全表扫描SQL
  13. Ubuntu下U盘变成只读的解决方法
  14. 水很深的深度学习-Task01深度学习概述与数学基础
  15. 编写自己的Windows Live Writer插件
  16. 解决办法:ubuntu登录后,桌面空空如也,状态栏没了
  17. Java实现经典坦克大战及源代码下载
  18. scope hosting_针对Web开发人员的Cloud Hosting和CDN服务–最佳
  19. 〖数学算法〗开平方的七种算法
  20. 2020年第4季度OKR个人总结

热门文章

  1. 2021中国开源码力榜启动,寻找开源世界的超级玛丽
  2. WIN32,GetBitmapBits与GetPixel
  3. 虚幻引擎5.1现已发布!
  4. 接入层、汇聚层、核心层之间的区别
  5. 超多好礼等你来!绘超萌兔年AI头像,抢限定AI绘画红包封面!
  6. 【PTA 7-11】骑士的金币
  7. 【大数据技术分享】数据清理的终极指南
  8. 金田一少年の怪奇事件部
  9. Java 无需解压直接读取ZIP压缩包里的文件及内容
  10. vim 编辑器 不小心点了crtl+s 终端停止输出问题