【题解】ABC210 E - Distance on Large Perfect Binary Tree
我考后整整写了 1 个多小时 …
sol:
考验强大的数学推演能力
我们把一个节点视作 01 序列,走左子树相当于在序列末尾添加 0 ,走右子树相当于添加 1 。
那么两个点的距离其实取决于公共前缀的长度。
所以我们想到枚举 lca ,同时根据完全二叉树的对称性可知相同深度的点对答案的贡献是一样的。
首先枚举 i = 0 ~ n-1 表示深度。
这里必须分两种情况计算:
- 两个点在同一子树内, 2 i ∗ 2 m = 2 i + m 2^{i} * 2^{m}=2^{i+m} 2i∗2m=2i+m
- 两个节点一个在左子树,一个在右子树,不难发现总数恒为 2 m − 2 2^{m-2} 2m−2 。
假设左子树深度为 i+k ,右子树深度为 i+(m-k) ,这里 1<=k<=m-1 。因为深度不能超过 n ,所以 i+k<=n 且 i+(m-k)<=n
解出 k 的范围即可 (利用数学表达式推式子)
__EOF__

本文作者:仰望星空的蚂蚁
本文链接:https://www.cnblogs.com/cqbzly/p/17530239.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/cqbzly/p/17530239.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步