异或问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异或问题相关的知识,希望对你有一定的参考价值。
参考技术A 异或的作用:0+1=1 ,0+0=0或者1+1=0输入描述:
第一行一个数字n
第二行n个数字
输出描述:
输出最多的区间的个数
示例:
输入
3 0 2 2
输出
2
思路:因为每两个数之间异或的值我们无法判断,所以采用一个思想:我先给定一个值(’存入set集合。其他集合都行)然后将它与后一个数异或(’存入set集合),再将值与后一位数异或(’存入set集合),以此类推,直到某一个结果与之前的值相等,那么此时count加一。 只要中间有值异或为0,那么就肯定 会有后来的值等于之前的值。
题目描述:给定整数m以及n个数字A1, A2, …, An,将数列A中所有元素两两异或,共能得到n(n-1)/2个结果。
请求出这些结果中大于m的有多少个。
输入:第一行包含两个整数n, m。
第二行给出n个整数A1, A2, …, An。
样例输入:3 10
6 5 10
输出:输出仅包括一行,即所求的答案。
样例输出:2
异或那道题可以把每个数的二进制位求出来,用一个字典树维护,然后遍历每一个数按位贪心,比如这一位m是1,遍历的这个数这一位是0,那么和他异或的数就必须是1,如果这一位m是0,要大于m的话异或和的这一位可以是1也可以是零,ans加上之前维护的二进制位加上使这一位为1的数在字典树中查询有多少个数满足这个前缀的条件,然后在令这一位的异或和为0,继续向下遍历,最后的答案除以2。
以上是关于异或问题的主要内容,如果未能解决你的问题,请参考以下文章