标签:
题意:
给你一些数,其中任选一些数(大于等于一个),那么他们有一个异或和。
求所有这样的异或和的第k小。
我们可以将每一位看成一维,然后就是给我们n个60维的向量,求它们线性组合后得到的向量空间中,第k小的向量。
因为给我们的向量不一定是非线性相关的(即存在一些向量可以被其他向量线性表示出),所以我们先进行异或高斯消元,将这n个数”精简出“一组基底,即精简前得到的向量空间和精简后的到的是一样的。(精简后最多有60个向量)。
假如我们的到了m个基底,因为它们线性不相关,所以我们有2^m种可能(包括0)。
高斯消元以后,我们得到的每个数的最高位非零位一定不为相同,我们按照从高位到低位的顺序排序(高斯消元后本来就是这个顺序),并且从上到下,遍历每一个数,并且用他将它上面的数的它的最高位去掉(如果本来就是0就不用),这样就可以证明”能加则加“了。
然后就二分啦。。。。。
标签:
原文地址:http://www.cnblogs.com/idy002/p/4524711.html