题解:P7051 [NWRRC2015] Distribution in Metagonia

很久没写题解了,今天来写一篇。。

思路

拆分每个数,发现一定可以拆分成 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×(a3t)

对了,对于每次操作,选取 max⁡a\max amaxa 使得 a2∣na^2 | na2n,然后选取 aaa 下的 max⁡b\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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值