CodeForces #796 Div2 | 题解ABC

这题暴力肯定会超时,于是我们就需要思考位运算的一些有趣的性质,
参考官方解法,我们有:
x and y>0⇔∃i, pi=qi=1x and y>0⇔∃i, pi=qi=1.
x xor y>0⇔∃i, pi≠qix xor y>0⇔∃i, pi≠qi.
为了满足第一个条件,找到pk = 1的最小整数k,并将1赋给qk;
如果x != 2k,第二个条件现在满足了。
否则,找到满足pj = 0的最小整数j,并将1赋给qj。
这题是一个比较容易想到的贪心题,
首先看看有没有偶数,如果没有,直接满足了,输出0即可;
如果不全为偶数,也就是有奇数存在,那我们最好的策略就是每一次把一个偶数与奇数相加,答案显然是奇数,输出次数即可;
如果全是偶数,那我们只需要看哪一位偶数能最快降到奇数即可,我们可以预先用一个数组来存储2的幂,这样减少复杂度。
C题先欠着()