一、题目

  XOR

二、分析

  给定$N$个数,问它的任意子集异或产生的数进行排列,求第K小的数。

  构造出线性基$B$后,如果$|B| < N$,那么代表N个数中有一个数是可以由线性基中的其他数异或出来的,那么相当于可以异或出$0$。也就是说这种情况下会多一个0作为最小数。

  然后对于第$K$大,可以直接对$K$的二进制进行判断,如果为$1$就取线性基对应的数,然后进行异或就可以得出答案了。

三、AC代码

 1 #include <bits/stdc++.h>
2
3 using namespace std;
4 #define ll long long
5 #define Min(a,b) ((a)>(b)?(b):(a))
6 #define Max(a,b) ((a)>(b)?(a):(b))
7 const int maxn = 1e4 + 13;
8 const int maxl = 62;
9 ll a[maxn];
10
11 struct LinerBasis
12 {
13 vector<ll> vec;
14 int n;
15
16 void build(ll *x, int n)
17 {
18 this->n = n;
19 vector<ll> a(maxl+1);
20 for(int i = 1; i <= n; i++)
21 {
22 ll t = x[i];
23 for(int j = maxl; j >= 0; j--)
24 {
25 if( (t & (1ll<<j)) == 0 )
26 continue;
27 if(a[j])
28 t^=a[j];
29 else
30 {
31 //将低位的已存在的a[k],异或消掉t的这一位1
32 //a[k]=0也没有影响
33 for(int k = 0; k < j; k++)
34 {
35 if(t & (1ll<<k))
36 t ^= a[k];
37 }
38 //消除高位上a[k]的第j位1
39 for(int k = j + 1; k <= maxl; k++)
40 {
41 if(a[k] & (1ll << j))
42 a[k] ^= t;
43 }
44 a[j] = t;
45 break;
46 }
47 }
48 }
49 vec.clear();
50 for(int i = 0; i <= maxl; i++)
51 {
52 if(a[i])
53 vec.push_back(a[i]);
54 }
55 }
56
57 ll query(ll K)
58 {
59 //可能异或出0
60 if(vec.size() < n)
61 K--;
62 if(K > (1ll<<vec.size()) - 1)
63 return -1;
64 ll ans = 0;
65 for(int i = 0; i < vec.size(); i++)
66 {
67 if(K & (1ll << i))
68 {
69 ans ^= vec[i];
70 }
71 }
72 return ans;
73 }
74
75 }lb;
76
77 int main()
78 {
79 int T, Case = 0;
80 scanf("%d", &T);
81 while(T--)
82 {
83 int N, Q;
84 scanf("%d", &N);
85 for(int i = 1; i <= N; i++) scanf("%lld", &a[i]);
86
87 lb.build(a, N);
88
89 scanf("%d", &Q);
90 ll K;
91 printf("Case #%d:\n", ++Case);
92 while(Q--)
93 {
94 scanf("%lld", &K);
95 printf("%lld\n", lb.query(K));
96 }
97 }
98 return 0;
99 }

HDU_3949 XOR 【线性基】的更多相关文章

  1. Xor && 线性基练习

    #include <cstdio> #include <cstring> ; ; int cnt,Ans,b,x,n; inline int Max(int x,int y) ...

  2. 【BZOJ-2115】Xor 线性基 + DFS

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2142  Solved: 893[Submit][Status] ...

  3. BZOJ.2115.[WC2011]Xor(线性基)

    题目链接 \(Description\) 给定一张无向带边权图(存在自环和重边).求一条1->n的路径,使得路径经过边的权值的Xor和最大.可重复经过点/边,且边权和计算多次. \(Soluti ...

  4. BZOJ2115:[WC2011] Xor(线性基)

    Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...

  5. HDU3949 XOR (线性基)

    HDU3949 XOR Problem Description XOR is a kind of bit operator, we define that as follow: for two bin ...

  6. [hdu3949]XOR(线性基求xor第k小)

    题目大意:求xor所有值的第k小,线性基模板题. #include<cstdio> #include<cstring> #include<algorithm> #i ...

  7. HDU3949 XOR(线性基第k小)

    Problem Description XOR is a kind of bit operator, we define that as follow: for two binary base num ...

  8. 2019牛客多校第一场H XOR 线性基模板

    H XOR 题意 给出一组数,求所有满足异或和为0的子集的长度和 分析 n为1e5,所以枚举子集肯定是不可行的,这种时候我们通常要转化成求每一个数的贡献,对于一组数异或和为0.我们考虑使用线性基,对这 ...

  9. BZOJ 2115 [Wc2011] Xor ——线性基

    [题目分析] 显然,一个路径走过两边是不需要计算的,所以我么找到一条1-n的路径,然后向该异或值不断异或简单环即可. 但是找出所有简单环是相当复杂的,我们只需要dfs一遍,找出所有的环路即可,因为所有 ...

  10. BZOJ 2844: albus就是要第一个出场 [高斯消元XOR 线性基]

    2844: albus就是要第一个出场 题意:给定一个n个数的集合S和一个数x,求x在S的$2^n$个子集从小到大的异或和序列中最早出现的位置 一开始看错题了...人家要求的是x第一次出现位置不是第x ...

随机推荐

  1. AF_INET与套接字SOCKET

    一.SOCKET--套接字 套接字最初是为同一主机上的应用程序所创建,使得主机上运行的一个程序(又名一个进程)与另一个运行的程序进行通信.这就是所谓的进程间通信(Inter Process Commu ...

  2. 近期做的一些DP

    UVa 1625 color length https://blog.csdn.net/Dylan_Frank/article/details/52261424 https://www.cnblogs ...

  3. 作业day03吴童

    小作业3 1. 求区间[100, 200]内10个随机整型数的最大值 1 import random 2 a = [] 3 for i in range(10): 4 n = random.randi ...

  4. Excel 如何固定表头

    Excel 如何固定表头 视图-冻结窗格-冻结首行 EXCEL如何设置固定表头 一.首先打开Excel表格,如果你的表头只有一行,那么直接选择"视图-冻结窗格-冻结首行"就可以了. ...

  5. MDN All In One

    MDN All In One https://github.com/mdn/ https://wiki.mozilla.org/MDN MDN 要凉了 https://developer.mozill ...

  6. Python 股票市场分析实战

    目标: 1.股票数据获取 2.历史趋势分析及可视化 3.风险分析 实验数据:来源于Yahoo Finance / Stooq,该网站提供了很多API接口,本文用的工具是pandas-datareade ...

  7. apply方法的实现原理

    apply 的核心原理: 将函数设为对象的属性 执行和删除这个函数 指定 this 到函数并传入给定参数执行函数 如果不传参数,默认指向 window Function.prototype.myApp ...

  8. MySQL应用优化

    MySQL应用优化 目录 MySQL应用优化 1.数据库连接池 2.减少对MySQL的访问 3.负载均衡 4.MySQL查询缓存优化 5.MySQL如何使用缓存 6.MySQL内存管理以及优化 原则 ...

  9. Nifi组件脚本开发—ExecuteScript 使用指南(三)

    上一篇:Nifi组件脚本开发-ExecuteScript 使用指南(二) Part 3 - 高级特征 本系列的前两篇文章涵盖了 flow file 的基本操作, 如读写属性和内容, 以及使用" ...

  10. java基础学习——Swing图形化用户界面编程

    原文链接:https://blog.csdn.net/yiziweiyang/article/details/52317240 链接有详细解释,也有例子,以下是个人参照例子实验的代码. package ...