位运算
若渴.
大智不群,大善无帮,何惧孤步,何惧毁谤。
展开
-
Codeforces #672 Div2 1420B. Rock and Lever
题目链接 1420B 题解 题意 找到数组中满足i<ji<ji<j 且 (ai(a_i(ai & aj)a_j)aj) ≤(ai⨁aj)\leq (a_i \bigoplus a_j)≤(ai⨁aj)的pair的数量。 思路 当aia_iai和aja_jaj的二进制表示的最高位位置相同且为1时,可以满足上述条件。 最高位的1相与之后得到1; 最高位的1异或之后得到0(异或可以看作不进位的加法)。 求数量可以在观察之后可以得出等差数列的做法。 AC代码 #includ原创 2020-09-28 22:43:24 · 147 阅读 · 0 评论 -
位运算73. 数组中只出现一次的两个数字
题目 题目链接:73. 数组中只出现一次的两个数字 题解 思路为将题目拆分成两个简单的小题:求一个数组中出现一次的一个数字。 我们需要用到异或运算的一个性质:xxx ^ x=0x = 0x=0. 由题意,除了所求的两个数字 xxx 和 yyy ,其余数字均出现了两次及以上,那么我们将所有的数字异或后所得的数字即为所求的 xxx 和 yyy 的异或。 由于x≠yx \neq yx=y, 所以所得结果必然不等于0, 即将其转换为二进制后必定至少存在一位不为0. 求出其中不为0的一位所在的位置,并可以由此将所原创 2020-08-13 18:39:36 · 128 阅读 · 0 评论 -
位运算 二进制中1的个数
题目 题目链接:二进制中1的个数 题解 十进制转二进制先模后除就可以。 对于负数,我们需要输出其绝对值的补码。 当出现负数时,记录该数字为负数,取绝对值。对二进制进行遍历,判断该位是1还是0,并记录。 如果该数字是负数则输出32 - 0的个数,否则输出1的个数。 AC代码 class Solution { public: int NumberOf1(int n) { bool flag = false; if (n < 0) { flag原创 2020-08-13 17:58:46 · 97 阅读 · 0 评论 -
CF #1395C. Boboniu and Bit Operations
题目 题目链接:1395C 参考视频:Bilibili 思路 求 c1c_1c1| c2c_2c2 | c3c_3c3 | … | cnc_ncn所得的x, 其中 cic_ici === aia_iai ^ bjb_jbj. 可以看出题目的数据范围并不大, 所以我们可以枚举所有的答案。 对于所有的 aia_iai, 若 xxx | (ai(a_i(ai & bj)b_j)bj) == xxx 成立,则 xxx 为所求答案。 AC代码 #include<bits/stdc+原创 2020-08-13 16:51:48 · 452 阅读 · 0 评论