题目大意:求xor所有值的第k小,线性基模板题。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
const int MAX_BASE=;
ll base[],a[],n,m;
//构造线性基,也可用来判断x是否存在,最后返回是否等于0即可。
void getbase(){
memset(base,,sizeof base);
for(int i=;i<=n;i++){
for(int j=MAX_BASE;j>=;j--){
if(a[i]>>j){
if(!base[j]){
base[j]=a[i];
break;
}
a[i]^=base[j];
}
}
}
}
//从高位到低位扫描线性基。如果异或之后答案变大,就把这一位异或到答案。
ll query_max(){
ll ans=;
for(int i=MAX_BASE;i>=;i--){
if((base[i]^ans)>ans){
ans=base[i]^ans;
}
}
return ans;
}
//从低位到高位扫描线性基。最低位上的线性基即为答案。
ll query_min(){
for(int i=;i<=MAX_BASE;i++)
if(base[i]>) return a[i];
}
ll cnt,p[];
//注意0的特殊情况,判断if(n!=cnt)k--;
void rebuild(){
cnt=;
for(int i=MAX_BASE;i>=;i--){
if(!base[i]) continue;
for(int j=i-;j>=;j--)//还是倒序,一定
if((base[i]>>j)&)
base[i]^=base[j];
}
for(int i=;i<=MAX_BASE;i++)
if(base[i])
p[cnt++]=base[i];
}
ll query_k_max(ll k){
ll ans=;
if(k>=(1ll<<cnt)) return -;
for(int i=MAX_BASE;i>=;i--){
if((k>>i)&)
ans^=p[i];
}
return ans;
} int main(){
int t,tmp;
scanf("%d",&t);
for(int _=;_<=t;_++){
printf("Case #%d:\n",_);
scanf("%lld",&n);
for(int i=;i<=n;i++)scanf("%lld",&a[i]);
getbase();
rebuild();
scanf("%d",&m);
for(int i=;i<=m;i++){
scanf("%d",&tmp);
if(n!=cnt) tmp--;
ll ans=query_k_max(tmp);
printf("%lld\n",ans);
}
}
return ;
}

[hdu3949]XOR(线性基求xor第k小)的更多相关文章

  1. HDU3949 XOR (线性基)

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

  2. hdu3949(线性基,求第k小的异或和

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 XOR Time Limit: 2000/1000 MS (Java/Others)    Me ...

  3. Xor && 线性基练习

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

  4. hdu 3949 XOR (线性基)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=3949 题意: 给出n个数,从中任意取几个数字异或,求第k小的异或和 思路: 线性基求第k小异或和,因为题 ...

  5. 线性基求交(2019牛客国庆集训派对day4)

    题意:https://ac.nowcoder.com/acm/contest/1109/C 问你有几个x满足A,B集合都能XOR出x. 思路: 就是线性基求交后,有几个基就是2^几次方. #defin ...

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

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

  7. hdu 3949 XOR 线性基 第k小异或和

    题目链接 题意 给定\(n\)个数,对其每一个子集计算异或和,求第\(k\)小的异或和. 思路 先求得线性基. 同上题,转化为求其线性基的子集的第k小异或和. 结论 记\(n\)个数的线性基为向量组\ ...

  8. 线性基求交(线段树)--牛客第四场(xor)

    题意: 给你n个基,q个询问,每个询问问你能不能 l~r 的所有基都能表示 x . 思路: 建一颗线性基的线段树,up就是求交的过程,按照线段树区间查询的方法进行check就可以了. #define ...

  9. 2019牛客多校第四场B xor(线性基求交)题解

    题意: 传送门 给\(n\)个集合,每个集合有一些数.给出\(m\)个询问,再给出\(l\)和\(r\)和一个数\(v\),问你任意的\(i \in[l,r]\)的集合,能不能找出子集异或为\(v\) ...

随机推荐

  1. Gridview中Datakeys 通过主键取得各列的值。

    首先在初始化Gridview时候定义主键的数组. GridViewTeacherStudent.DataKeyNames=new string[] {"courseId",&quo ...

  2. hdu 2149 Public Sale(bash)

    Public Sale Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. (转) Android Service完全解析,关于服务你所需知道的一切(上)

    相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了.Service作为Android四大组件之一,在每一个应用程序 ...

  4. 面试题46:求1+2+...+n

    题目:求1+2+...+n,要求不能使用乘除法.for.while.if.else.swithc.case等关键字及条件判断语句(A?B:C). 解法一:利用构造函数求解 class Temp { p ...

  5. grep搜索子目录中包含某字符串的特定文件

    grep -n "str" -r ./ 这是查找当前目录下以及下辖子目录下所有包含str字符串的文件,会列出文件名.以及该行的内容.以及行号 比如,我想搜源码目录src下,包含“n ...

  6. HTTP协议状态代码和错误状态含义的解释

    面试互联网公司经常被问的就是HTTP协议的知识,甚至比TCP/IP问的还多,其中HTTP代码的知识也是开发过程中经常会接触的,今天学习所有 HTTP 状态代码及其定义. 代码  指示     2xx  ...

  7. NOIP模拟题 栅栏

    题目大意 给定一个$n\times m$的网格图,每次会选择一块矩形沿着网格线铺上栅栏,或者拆除之前铺的栅栏,或者询问两个格子能否不经过栅栏直接到达. 保证栅栏没有重叠或交叉,删去的栅栏删除前一定存在 ...

  8. 学习动态性能表(22)V$resource_limit

    学习动态性能表 第20篇--V$resource_limit  2007.6.15 就一条SQL语句供你参考: select * from V$RESOURCE_LIMIT where resourc ...

  9. JSON格式化以及转化为Entity事项

    其实JSON在eclipse里面就可以自动化,不需要再联网去进行格式化: 然后通过http://www.bejson.com/java2pojo/ 即可实现json转java   但是要注意:从str ...

  10. bzoj 4503 两个串——FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4503 翻转T,就变成卷积.要想想怎么判断. 因为卷积是乘积求和,又想到相等的话相减为0,所以 ...