Performance 如何为跳蛙定位百合花?
我最近一直在练习解决问题的技巧,为高中编程比赛做准备,遇到了一个有趣的问题 2013年,首届国际蛙泳奥林匹克运动会将在澳大利亚举行,你决心获胜。虽然你不想和这些粘乎乎的、神经质的生物有任何关系,但你计划进入一个像青蛙一样的机器人,你知道它将比所有其他有机物进入者都要快 IOF发生在一个大池塘里,池塘里有一排排排成长队的百合花垫。比赛规则很简单:你的青蛙将被放在第一个睡莲垫上,然后它必须跳到第二个睡莲垫上,然后跳到第三个睡莲垫上,依此类推,直到它到达球场上的最后一个睡莲垫。请注意,您不能“跳过”睡莲垫——每个睡莲垫必须跳上一次。第一只到达最后一朵百合花的青蛙将赢得比赛。由于你的机器青蛙拥有超青蛙速度,你对自己的胜利充满信心 然而,你的青蛙有一个小的不可纠正的缺陷——它只能跳一个固定的距离。具体来说,它只能从当前位置向前跳K米,即使这会使青蛙落在水中(它会在水中迅速短路) 由于最初的睡莲垫位置可能使你的青蛙无法到达最后一个睡莲垫,因此你计划分散注意力,移动睡莲垫,使它们的间距正好为K米,使你的青蛙能够从第一个跳到最后一个,而不会掉进水里。将睡莲垫移动一米需要一秒钟的时间,而且你偷偷移动睡莲垫的时间越长,IOF评委就越有可能注意到你并取消你的参赛资格 考虑到课程中睡莲垫之间的初始距离,您必须编写一个程序来计算移动睡莲垫所需的最短时间,以便所有连续睡莲垫对之间的距离正好为K米。您可以假设池塘足够长,因此第一个百合花垫可以向后移动任意距离,最后一个百合花垫可以向前移动任意距离 输入和输出示例Performance 如何为跳蛙定位百合花?,performance,algorithm,language-agnostic,Performance,Algorithm,Language Agnostic,我最近一直在练习解决问题的技巧,为高中编程比赛做准备,遇到了一个有趣的问题 2013年,首届国际蛙泳奥林匹克运动会将在澳大利亚举行,你决心获胜。虽然你不想和这些粘乎乎的、神经质的生物有任何关系,但你计划进入一个像青蛙一样的机器人,你知道它将比所有其他有机物进入者都要快 IOF发生在一个大池塘里,池塘里有一排排排成长队的百合花垫。比赛规则很简单:你的青蛙将被放在第一个睡莲垫上,然后它必须跳到第二个睡莲垫上,然后跳到第三个睡莲垫上,依此类推,直到它到达球场上的最后一个睡莲垫。请注意,您不能“跳过”睡
我已经考虑了这么长时间,但考虑到时间的限制,我仍然想不出任何方法来完成它,甚至无视这一点。任何关于如何处理此问题的建议或任何关于研究算法/概念的建议都将不胜感激。提前谢谢你的帮助
欢迎使用任何代码,最好使用c/c++、python、Java或c#。谢谢一般来说,您可以考虑解决建模和设计/实现方面的问题
n
个圆圈,可以向前跳转距离x
(其值在输入文件中定义)
- 让
圆圈由编号n
至0
(n-1)
- 设
d[i],1≤ 我≤ n-1是圆
和圆(i-1)
之间的距离。(其初始值在输入文件中定义)i
i
,d[i]=x
,使用最小的圆移动次数,每次移动将一个圆向左或向右移动1
2种可能的操作
第一圈和最后一圈
- 移动第一个圆圈,将圆圈
向左移动0
空格:y
d[1]=d[1]+y
- 将第一个圆向右移动
圈0
空格:y
d[1]=d[1]-y
- 移动最后一个圆圈,将圆圈
向左移动n-1
空格:y
d[n-1]=d[n-1]-y
- 移动最后一个圆圈,将
圆圈向右移动n-1
空格:y
d[n-1]=d[n-1]+y
i
,1≤ 我≤ n-1
- 将圆
向左移动i
空格:y
和d[i]=d[i]-y
d[i+1]=d[i+1]+y
- 将圆
向右移动i
空格:y
和d[i]=d[i]+y
d[i+1]=d[i+1]-y
- 对于第一个和最后一个距离,您可以添加/减去任何数字
y
对于中间的距离,你可以添加/减去任何数字<代码> y>代码>但是你必须通过从相邻的距离减去/添加<代码> y <代码>来平衡这一点。
new_left_sum = left_sum + left_count + array[current_zero_index]
new_left_count = left_count + array[current_zero_index]
new_right_sum = right_sum - right_count
new_right_count = right_count - array[current_zero_index]
current_zero_index = current_zero_index + 1