傳送門
我們需要還原初始的x,將x按二進制位分開來考慮 每一位不是0就是1,所以將0和1分別做一下下面那一坨操作(操作的數也是對應的這一位),最終得到兩個數 如果0做了這一坨操作之后變成了1,那很顯然這一位填0更優(yōu) 否則,如果1做了這一坨操作之后還是1,那么先把這一位暫且記為1 再否則1和0都會變成0,那么毫無疑問填0 然后將每一位合起來得到了一個x 但是這個x是有可能大于m的,所以從高位向低位枚舉,貪心地去掉一些1, 如果這一位m是1,那么x填01都可以,不變;不過,如果x填了0的話,x之后的位就可以隨便填了 如果這一位m是0,那么x只能填0,如果原先填的是1需要修改 這樣保證先滿足較高位的,一定是最優(yōu)的方案
位運算的題目一定要考慮按位分開,這一點很重要
新聞熱點
疑難解答