传送门
我们需要还原初始的x,将x按二进制位分开来考虑 每一位不是0就是1,所以将0和1分别做一下下面那一坨操作(操作的数也是对应的这一位),最终得到两个数 如果0做了这一坨操作之后变成了1,那很显然这一位填0更优 否则,如果1做了这一坨操作之后还是1,那么先把这一位暂且记为1 再否则1和0都会变成0,那么毫无疑问填0 然后将每一位合起来得到了一个x 但是这个x是有可能大于m的,所以从高位向低位枚举,贪心地去掉一些1, 如果这一位m是1,那么x填01都可以,不变;不过,如果x填了0的话,x之后的位就可以随便填了 如果这一位m是0,那么x只能填0,如果原先填的是1需要修改 这样保证先满足较高位的,一定是最优的方案
位运算的题目一定要考虑按位分开,这一点很重要
新闻热点
疑难解答