题面 题解: 显然每个数的二进制位是互不影响的,所以可以每位拆开做. 考虑每一段连续1前面的第一个0,根据该串前缀异或和中0和1的个数考虑是否取反该0. 而每段连续1后面的连续零长度若大于1,则该位取该串1的前缀异或和的值,可以使得除最后一位外均为0,若连续零长度等于1则可以不管,根据下一串连续1来确定该位取值. Code