码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 3949 第k大异或组合

时间:2015-05-23 19:52:54      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:

题意:

给你一些数,其中任选一些数(大于等于一个),那么他们有一个异或和。

求所有这样的异或和的第k小。

 

我们可以将每一位看成一维,然后就是给我们n个60维的向量,求它们线性组合后得到的向量空间中,第k小的向量。

因为给我们的向量不一定是非线性相关的(即存在一些向量可以被其他向量线性表示出),所以我们先进行异或高斯消元,将这n个数”精简出“一组基底,即精简前得到的向量空间和精简后的到的是一样的。(精简后最多有60个向量)。

假如我们的到了m个基底,因为它们线性不相关,所以我们有2^m种可能(包括0)。

高斯消元以后,我们得到的每个数的最高位非零位一定不为相同,我们按照从高位到低位的顺序排序(高斯消元后本来就是这个顺序),并且从上到下,遍历每一个数,并且用他将它上面的数的它的最高位去掉(如果本来就是0就不用),这样就可以证明”能加则加“了。

然后就二分啦。。。。。

hdu 3949 第k大异或组合

标签:

原文地址:http://www.cnblogs.com/idy002/p/4524711.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!