题意:

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

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

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

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

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

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

然后就二分啦。。。。。

  1. #include <cstdio>
  2. #include <iostream>
  3. #define N 10010
  4. using namespace std;
  5.  
  6. typedef long long dnt;
  7.  
  8. int n, m, q;
  9. dnt aa[N];
  10. int bit[N];
  11. bool flag;
  12.  
  13. void gauss() {
  14. int i=;
  15. for( int b=; b>= && i<n; b-- ) {
  16. for( int j=i; j<n; j++ ) {
  17. if( (aa[j]>>b)& ) {
  18. swap( aa[i], aa[j] );
  19. break;
  20. }
  21. }
  22. if( (aa[i]>>b)& ) {
  23. bit[i] = b;
  24. for( int j=i+; j<n; j++ )
  25. if( (aa[j]>>b)& ) aa[j] ^= aa[i];
  26. i++;
  27. }
  28. }
  29. m = i;
  30. for( i=; i<m; i++ ) {
  31. for( int j=i-; j>=; j-- ) {
  32. if( (aa[j]>>bit[i])& )
  33. aa[j] ^= aa[i];
  34. }
  35. }
  36. flag = m<n;
  37. }
  38. dnt query( dnt k ) {
  39. if( !flag ) k++;
  40. if( k>(1LL<<m) ) return -;
  41. dnt cur = ;
  42. for( int i=; i<m; i++ ) {
  43. if( k>(1LL<<(m--i)) ) {
  44. k-=(1LL<<(m--i));
  45. cur ^= aa[i];
  46. }
  47. }
  48. return cur;
  49. }
  50. int main() {
  51. int T;
  52. scanf( "%d", &T );
  53. for( int cas=; cas<=T; cas++ ) {
  54. scanf( "%d", &n );
  55. for( int i=; i<n; i++ )
  56. scanf( "%lld", aa+i );
  57. gauss();
  58. scanf( "%d", &q );
  59. printf( "Case #%d:\n", cas );
  60. for( int i=; i<q; i++ ) {
  61. dnt k;
  62. scanf( "%lld", &k );
  63. printf( "%lld\n", query(k) );
  64. }
  65. }
  66. }

hdu 3949 第k大异或组合的更多相关文章

  1. Loj 114 k大异或和

    Loj 114 k大异或和 构造线性基时有所变化.试图构造一个线性基,使得从高到低位走,异或上一个非 \(0\) 的数,总能变大. 构造时让任意两个 \(bas\) 上有值的 \(i,j\) ,满足 ...

  2. 【线性基】51nod1312 最大异或和&LOJ114 k大异或和

    1312 最大异或和 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题   有一个正整数数组S,S中有N个元素,这些元素分别是S[0] ...

  3. [LOJ#114]k 大异或和

    [LOJ#114]k 大异或和 试题描述 这是一道模板题. 给由 n 个数组成的一个可重集 S,每次给定一个数 k,求一个集合 T⊆S,使得集合 T 在 S 的所有非空子集的不同的异或和中,其异或和  ...

  4. LibreOJ #114. k 大异或和

    二次联通门 : LibreOJ #114. k 大异或和 /* LibreOJ #114. k 大异或和 WA了很多遍 为什么呢... 一开始读入原数的时候写的是for(;N--;) 而重新构造线性基 ...

  5. 第k大异或值

    这道题与2018年十二省联考中的异或粽子很相像,可以算作一个简易版: 因为这不需要可持久化: 也就是说求任意两个数异或起来的第k大值: 首先把所有数放进trie里. 然后二分答案,枚举每个数,相应地在 ...

  6. hdu 4006 第K大的数(优先队列)

    N次操作 I是插入一个数 Q是输出第K大的数 Sample Input8 3 //n kI 1I 2I 3QI 5QI 4Q Sample Output123 # include <iostre ...

  7. LOJ114 k大异或和

    传送门 (vjudge和hdu也有但是我觉得LOJ好看!而且限制少!) 不过本题描述有误,应该是k小. 首先我们需要对线性基进行改造.需要把每一位改造成为,包含最高位的能异或出来的最小的数. 为啥呢? ...

  8. hdu 2639 第k大01背包

    求每个状态里的k优解,然后合并 /* HDU 2639 求01背包的第k大解. 合并两个有序序列 */ #include<stdio.h> #include<iostream> ...

  9. LOJ.114.K大异或和(线性基)

    题目链接 如何求线性基中第K小的异或和?好像不太好做. 如果我们在线性基内部Xor一下,使得从高到低位枚举时,选base[i]一定比不选base[i]大(存在base[i]). 这可以重构一下线性基, ...

随机推荐

  1. 使用python开发一个能够计算带括号的复杂表达式的计算器(只支持加减乘除)

    使用到了模块re,正则,字典等 # 实现简单的加减乘除括号等运算 # Calculator def calculator(expression): print(expression) import r ...

  2. ip分片重组 ip_defrag

    在ip_local_deliver中,如果检测到是分片包,则需要进行分片重组: ip_local_deliver |-->ip_is_fragment //判断是否为分片包 |-->ip_ ...

  3. HDU 6061 RXD and functions

    题目链接:HDU-6061 题意:给定f(x),求f(x-A)各项系数. 思路:推导公式有如下结论: 然后用NTT解决即可. 代码: #include <set> #include < ...

  4. C基础 旋转数组查找题目

    前言 - 引言 题目: 一类有序数组旋转查值问题. 例如: 有序数组 [ , , , , , , , , ] 旋转后为 [ , , , , , , , , ] 如何从中找出一个值索引, not fou ...

  5. 数据库——mysql如何获取当前时间

    1.1 获得当前日期+时间(date + time)函数:now() 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数: current_timestamp() curren ...

  6. Windows 8 应用程序前后台切换事件监听

    在一些情况下,我们需要监听应用程序切换到后台或者从后台切换至前台的事件,从而进行相关处理操作.支付宝应用锁屏(IOS,Android平台)的处理中就需要监听此事件,在用户将应用切换至后台一段时间后再切 ...

  7. SQLAlchemy-对象关系教程ORM-query

    一:对象关系教程查询 一个 Query创建对象时使用 Session的query()方法 .此函数接受一个变量数量的参数,可以是任何类和class-instrumented描述符的组合. Query返 ...

  8. Java事务管理之JDBC

    前言 关于Java中JDBC的一些使用可以参见: Java 中使用JDBC连接数据库例程与注意事项 在使用JDBC的使用, 如何进行事务的管理.直接看一下代码 示例代码 /** * @Title: J ...

  9. Vue select 下拉菜单

    1.html <div id="app-8"> <select v-model="selected"> <option v-for ...

  10. CCF CSP 201604-3 路径解析

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201604-3 路径解析 问题描述 在操作系统中,数据通常以文件的形式存储在文件系统中.文件系 ...