51Nod-1615-跳跃的杰克

2023-12-07 03:58
文章标签 跳跃 51nod 1615 杰克

本文主要是介绍51Nod-1615-跳跃的杰克,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1615 跳跃的杰克
题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
 收藏
 关注
杰克最近正在努力锻炼他的跳跃技能。当前他正站在X坐标轴原点上。他想跳到坐标(x,0)上,为了达到训练效果,他决定首次跳跃的距离是1,之后每一次跳跃的距离将会比上一次跳跃的距离大1个单位。每一次跳跃,他可以选择往左或者往右跳。他很好奇至少要经过多少次跳跃才能到达终点。

 


Input
单组测试数据。
输入数据只包含整数x(-10^9<=x<=10^9)。
Output
输出杰克到达终点所需要的最少的跳跃次数。
Input示例
2
Output示例
3

题目大意:从(x,0),每次跳跃跳跃距离+1,问至少条几次。

题解:可以吧问题倒过来:从(0,0)开始,至少跳几次跳到(x,0)。如果能够不调向直接跳到目标点当然很简单,主要是可以多次调整方向。其实画一画图就可以发现:不管怎么调整方向,起始点和目标点是不变的,也就是说明num=1+2+3……+ans>=x;那么思考一下num-x的部分去哪了(num>x)。其实可以发现(num-x)%2==0,这也是判断条件,为什么?以为num-x是多余的部分,既然是多余的部分,那么肯定会偏离x,然而最终停留在x,也就是跑远了还会在回来,画一画图就可以发现了,多余的段一定会被“去"和“回”同时覆盖,所以num-x一定是偶数。注意一定要特判n为负数和0点情况。

总结:当做不出来题时,画一画图也是一种不错的方法,说不定在动态模拟的过程中会发现题目暗藏的性质。


这篇关于51Nod-1615-跳跃的杰克的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/464405

相关文章

55.跳跃游戏

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。   /*** ClassName: Solution* Package: PACKAGE_NAME* Description:* @Author: GYF* @Create: 2024

【51nod】算法马拉松4 F 移数字 【快速求N!%P】【FFT】

传送门:【51nod】算法马拉松4 F 移数字 涉及知识点:多项式求逆,多项式除法,多点插值,阶乘取模。 对于N!%P,复杂度为 O(N−−√log2N−−√) O(\sqrt N \log^2\sqrt N)。 但常数巨大,和暴力算实际复杂度只相差常数= = 这个是可以扩展到组合数取模的~ my  code: my~~code: #include <stdio.h>#includ

2024.9.1 Python,跳跃游戏,贪心算法,回溯算法复原 IP 地址,关于回溯过程中列表的[:]以及copy问题再讨论

先祝各位C友们9月快乐,生活幸福。 1.跳跃游戏,贪心算法 昨天的三个代码我写到最后没时间去盘了,今天来盘一下,昨天我写的第一个代码从逻辑上就有问题,所以不停的报错不停的报错,我在报错的过程中不断地去加可能性,但是加一种可能就只解决一种问题,所以说明问题没有在根本上解决,所以我便在今天去看之前的代码有什么问题,我的代码如下: #错的class Solution:def jump(self,

最短路径算法:迪杰克斯拉(Dijkstra)算法(基于贪心思想)【从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题】【能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低】

Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Viterbi和Dijkstra算法看起来比较像,两者的区别: Dijkstra算法适应范围更广。Viterbi算法用在特殊的有向无环图中,而Dijkstra算法可以用在

Leetcode面试经典150题-45.跳跃游戏II

解法都在代码里,不懂就留言或者私信,这个题绝对比动态规划的解法强 class Solution {/**本题我们先不用动态规划了,因为从任何一个位置都可能跳到最后一个位置,用动态规划的成本太高了本题的解题思路:看看某个步数内最多能跳到多远,如果某步内能涵盖最后一个位置,那这个就是最小的步数 */public int jump(int[] nums) {/**你就在终点,跳啥啊 */if(num

Redis 跳跃表的实现

概述 跳跃表 SkipList 是一种有序数据结构,通过在每个节点中维持多个指向其它节点的指针,达到快速访问节点的目的 平均时间复杂度 O(logN),在大部分情况下,跳跃表的效率与平衡树相近,由于跳跃表实现的简易性,所以 Redis 使用跳表代替平衡树。 ZSET 存储元素,使用了 哈希表以及、SkipList 作为底层实现。 typedef struct zset {dict *dic

代码随想录Day 28|题目:122.买卖股票的最佳时机Ⅱ、55.跳跃游戏、45.跳跃游戏Ⅱ、1005.K次取反后最大化的数组和

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 题目题目一:122.买卖股票的最佳时机 II贪心算法:动态规划 题目二:55.跳跃游戏解题思路: 题目三: 45.跳跃游戏 II解题思路方法一方法二 题目四:1005.K次取反后最大化的数组和解题思路 总结 贪心算法继续刷题 题目 题目一:122.买卖股票的最佳时机 II 122. 买卖股票的最佳时机 II 贪心

算法训练第24天|122.买卖股票的最佳时机II|55. 跳跃游戏|45.跳跃游戏II|1005.K次取反后最大化的数组和

LeetCode 122.买卖股票的最佳时机II 题目链接:122.买卖股票的最佳时机II 题目讲解:代码随想录 func maxProfit(prices []int) int {var sum intfor i := 1; i < len(prices); i++{if prices[i] - prices[i - 1] > 0{sum += prices[i] - prices[i

力扣题解(跳跃游戏II)

45. 跳跃游戏 II 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处: 0 <= j <= nums[i] i + j < n 返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 n

贪心算法---跳跃游戏(2)

题目: 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处: 0 <= j <= nums[i] i + j < n 返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]