蓝桥杯国赛 2020-7 皮亚诺曲线距离

这道题第一眼感觉是找规律题,但是这呈指数级的增长实在看的眼花缭乱后来,后来终于寻得了题解,原来还有这么高级的找规律。
如果在这里看不懂,给你指条明路:链接https://www.cnblogs.com/EchoZQN/p/14829144.html

一开始看见题解,想这是啥呀全是数字,我的天,后来用大佬的代码提交试了一下,不仅过了,而且速度贼快,于是带着崇拜的心情来看这些黑乎乎的数字。
我先讲讲大面上的思路,细节的思路看下面的手稿。
首先将两点之间的距离变成两点与原点距离的差值。然后
大佬把地图分成了下面的九块,先不要想为什么这么分,看就行。下面的图也上上面的链接网站里的图。
在这里插入图片描述

然后确定(x,y)点在这九块中的哪一块,这个怎么确定呢?直接看坐标,我们可以求出地图的长和宽都是len,假设(x,y)在第5块,那么x必然大于len/3,小于len/32,y也是如此,由此就知道了(x,y)在哪一块了,其它的也是同样道理。(如果还不懂,欢迎私信)
确定完之后呢?我们就缩小地图,只把目光放在(x,y)所在的地图块上,怎么缩小?这就是为什么分块的原因了。
假设k,地图是3的k次方,k每次减1,地图就相应变小,3k ,3k-1,啊这,我对这两个指数幂没啥概念,还是举个具体的例子吧。假设K是3吧,一开始地图是27
27大小的,k-1后就变成了99大小的,而这个99刚好是27*27的九分之一大小,这就是分成九分的原因,因为k-1后地图变成了原来的九分之一,我要确定这个点落在了哪一个九分之一上,这样还是假设我落在了第五块,我缩小之后我是要求距离的,我们求的是大图的距离,我们要在一步步缩小地图的时候求距离。第五块的话,我在大图上经过了1,2,3,4块,这样我就要先加上这几块的总距离,然后再以同样的办法处理缩小了的地图。注意缩小了的地图下表是从0开始的,所以我还要修改原来的坐标,这个看图修改就行了,如果在第五块,我求出第五块的起始坐标,然后相减就可以了,注意不要减除负的来。为什么要减起始坐标,因为我们的(x,y)都是在以起始坐标为坐标原点的数轴上的。可能有的块起始坐标在(x,y)上面,没关系,反正这个坐标求的是(x,y)分别在x轴和y轴上距离坐标原点的距离,你就把起始坐标想象成坐标原点,就会容易理解了。
注意这是一个循环,每次(x,y)坐标变换一次,k都会减1,直到k等于0.

这个的思路就是分块去看,化整为零,不一次求出它的距离,而是不断缩小地图去一点一点求距离。距离也不是一步步走着求出来的,而是化零为整,一开始是一块一块去走的。
十分膜拜!!!!!!!!!!!!!!!!!!!!!!!!

以上是我个人的理解,欢迎指正,下面是具体的判断(x,y)在哪一块的过程

在这里插入图片描述
在这里插入图片描述
如果对算法问题有疑问,欢迎来 落花君 公众号。一起探讨算法的乐趣。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值