题意解析:给定两个正整数 n,mn,mn,m。你需要对 nnn 进行 mmm 次操作,每次操作可以选择 nnn 的一个二进制位,并将这个为 +1+1+1 并逐个进位。求 mmm 次操作后总进位数最大值。n≤230,m≤109n\le 2^{30},m\le 10^9n≤230,m≤109。多测,T≤1000T\le 1000T≤1000。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
对 000 进行操作不优于对 111 进行操作;每次对 111 进行操作,至少进 111 位;进位数超过 111 的操作不超过 log2n\log_2 nlog2 n 次,即对前 log2n\log_2 nlog2 n 位进行操作。
所以我们只需要处理前 logn\log nlogn 次操作,最后输出前面操作的最大值 +m+m+m 即可。
我们发现所有操作都是将连续的 111 变成下一位的 111,然后可以将 111 推到后面一块连续的 111。
所以我们就可以三进制枚举对某块连续的 111 不进行操作,进行一次操作,或者将这个 111 推到下一块,然后进行模拟求最大值。
时间复杂度为 O(Tnlog233logn)O(Tn^{\frac{\log_2^3}{3}}\log n)O(Tn3log23 logn),稍微剪枝一下应该就可以过。
不会卡常剪枝所以没代码。