Codeforces Round 626 D. Present 异或按位确定 +二分or双指针 题意 给n个数,求他们两两的和的异或结果 n(4e5) 值域(1e7) 思路 异或问题一般都是按位确定,那么怎么确定第k位的值呢。首先第k位的值只和[1,k]位有关系,也就是说只跟a[i]本来在这一位有的 ...
分类:
其他好文 时间:
2020-03-08 19:39:53
阅读次数:
59
从低到高枚举当前位i,把所有数字对1<<(i+1)取模,因为比i位高的数字不会影响到低位,在这些数中,两两组成一对,每对的和如果在第i位上为1,++计数,如果计数为奇数,则答案上这一位为1。这个组对的过程通过排序后二分查找完成。 1 #define HAVE_STRUCT_TIMESPEC 2 #i ...
分类:
其他好文 时间:
2020-03-08 19:31:10
阅读次数:
52
and和or指令 and 指令:逻辑与指令,按位进行与运算。 例如:and al,11111110B ;将al的第0位设为0。 or 指令:逻辑或指令,按位进行或运算。 例如:or al,00000001B ;将al的第0位设为1。 ASCll码 ASCLL 码就是一种编码方案所谓编码方案,就是一套 ...
分类:
编程语言 时间:
2020-03-08 16:08:28
阅读次数:
74
题目链接:https://codeforces.com/contest/1323/problem/D 题意:给了大小为4e5的数组a,其中1<=ai<=1e7。求所有点对和的异或和,即: 思路: 按位来考虑,因为两个元素的和<=2e7,而2e7小于225,因此结果最多是25位。我们考虑答案中每一位a ...
分类:
其他好文 时间:
2020-03-08 13:45:13
阅读次数:
65
其实最开始这个题我没做出来是因为我不知道&是啥意思,我以为是加和 这个题的意思其实就是让构建一个数组,使它的某个区间按位与的和为一个数,看看会不会产生矛盾。 知道这一点后就好办了,新建一个为0的数组,每次查询就 | 一下,然后查询区间按位与的和,看看符不符合] 为什么要 | 呢? 这要考虑&是怎么运 ...
分类:
其他好文 时间:
2020-03-08 13:39:49
阅读次数:
61
一:解题思路 这道题目介绍2种方法。解法一:利用位运算来做,数组中所有的数字都是成对出现的,只有一个是单独出现的,那么我们可以利用异或的性质来做。解法二:利用集合set的特性,把所有数字添加到集合中(每个数字只出现一次),然后将集合中的数字乘以2减去原来数组元素和。 二:完整代码示例 (C++版和J ...
分类:
其他好文 时间:
2020-03-07 20:53:40
阅读次数:
70
一:解题思路 对于这样的题目,不能使用加(+)、减(-),从而求两数之和。连最基本的+,-都不能用,那么肯定就要想到位运算了。找到里面的规律,进而总结出一般性的结论出来。比如,来举个例子,9+11 在二进制的层面来进行运算,为什么要用9和11两个数呢?因为他们包含了相加的多种情况在里面。 二:完整代 ...
分类:
其他好文 时间:
2020-03-07 17:36:26
阅读次数:
83
| 逻辑运算 | 规则 | 符号 | | : : | : : | | | 与 | 只有1 and 1 = 1,其他均为0 | & | | 或 | 只有0 or 0 = 0,其他均为1 | \| | | 非 | 也就是取反 | ~ | | 异或 | 相异为1相同为0 | ^ | | 同或 | 相同为1 ...
分类:
其他好文 时间:
2020-03-07 12:38:32
阅读次数:
76
目录 按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算。 运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1; 即:两位同时为“1”,结果才为“1”,否则为0 例如:3&5 即 0000 0011& 0000 0101 = 00000001 因此,3&5的值得1。 另,负 ...
分类:
其他好文 时间:
2020-03-07 10:12:08
阅读次数:
96
~ 位求反 单目 x1=~x2; 把x2二进制1变成0,0变成1; <<左移 双目 x1=<<2; 把x1二进制每个1向前移动2个单位 & 位与 都是1返回1,否则返回0; | 位或 有1就返回1 都是0返回0 异或 相同时返回0,不同时返回1 ...
分类:
编程语言 时间:
2020-03-04 15:06:26
阅读次数:
80