Skip to content
ABC 465 D - X to Y

ABC 465 D - X to Y

2026/7/8

题目链接

题意简述

初始时有一个非负整数 x=Xx=X ,每次操作可将 xx 变为 yy ,其中 yy 满足 xK=y\left \lfloor \dfrac{x}{K} \right \rfloor = yyK=x\left \lfloor \dfrac{y}{K} \right \rfloor = x

求将 xx 变为 YY 的最少操作次数(可以不操作).

多测,1T2×1051\le T\le 2\times 10^50X,Y10180\le X,Y\le 10^{18}2K10182\le K\le 10^{18}

解析

构造一棵以 00 为根节点的树,对于树上任意正整数节点 uu ,其父节点 Fa(u)=uK\mathrm{Fa}(u)=\left \lfloor \dfrac{u}{K} \right \rfloor

则对 xx 进行一次操作相当于将节点 xx 移动到其相邻节点 yy ,最少操作次数即为节点 XXYY 的最短路径 =Dist(X,LCA)+Dist(Y,LCA)=\mathrm{Dist}(X,\mathrm{LCA})+\mathrm{Dist}(Y,\mathrm{LCA})

容易看出对于任意节点 u>vu>vDepth(u)Depth(v)\mathrm{Depth}(u)\ge\mathrm{Depth}(v) ,故只需要每次将数值较大的节点上移直至两点相遇(即到达 LCA\mathrm{LCA}),移动次数即为最短路径.

参考代码

cpp
1
2
3
4
5
6
int cnt = 0;
while (x != y) {
    if (x > y) x /= k;
    else y /= k;
    cnt++;
}