很久没写题解了,今天来写一篇。。
思路
拆分每个数,发现一定可以拆分成 2x×3y×a2^x\times 3^y\times a2x×3y×a 的样子。
那么我们可以找到一个指数 ttt 使得 3t<a<3t+13^t\lt a\lt 3^{t+1}3t<a<3t+1,那么 ans=2x×3y+t+2x×3y×(a−3t)ans=2^x\times 3^{y+t}+2^x\times 3^y\times (a-3^t)ans=2x×3y+t+2x×3y×(a−3t)。
对了,对于每次操作,选取 maxa\max amaxa 使得 a2∣na^2 | na2∣n,然后选取 aaa 下的 maxb\max bmaxb,就满足单调递减了。
核心代码
while (n) {
base = 1ll;
while (!(n % 2)) tmp *= 2, n /= 2;
while (!(n % 3)) tmp *= 3, n /= 3;
while (base * 3 <= n) base *= 3;
ans[++ cnt] = tmp * base, n -= base;
}

被折叠的 条评论
为什么被折叠?



