求最少反转a和b中二进制的0和1的次数 使得a|b=c. 这个题先要观察a|b=c的特性 首先我们求出a|b 通过和c做异或 我们知道a|b和c有多少位上的数字是不同的. 记录做dd. 通过观察我们知道 如果这种不同来自于两个情况 第一是a和b一个是0 另一个是1 他们的a|b是1 如果这个位上的c是0 那么需要翻转一次. c是1的话 那么a|b是0 就是a和b都是0 那么也只需要翻转一次(任意a和b)即可. 另一种情况是a和b都是1 如果这个位上的c是0 那么需要反转两次. 所以这个异或包含了上面两种情况 但是对于第二种情况 需要找出 并且再加一次. 所以问题转化到 如何在这个结果中找出 a|b都是1的位数? 首先算a&b得到a和b的都是1的位数 然后再& (a|b)^c 就得到得到(a|b)^c这个所有的位区别下 a和b都是1的位的个数.
然后加起来即可.