HDU 3949 XOR 线性基
http://acm.hdu.edu.cn/showproblem.php?pid=3949
求异或第k小,结论是第k小就是 k二进制的第i位为1就把i位的线性基异或上去。
但是这道题和上一道线性基不同的地方是要缩一下位使得k的每一位都有线性基(毕竟是组合为基础的)。
要在往里塞线性基的时候把每个线性基上的1能往后放的尽量往后放emmm这么搞非常重要,以后写线性基都加一下这个可以处理的东西更多了。
(这个东西维护之后,线性基中所有数都变为二进制的话那么每个二进制位上至多有一个1)
这道题不能取空集所以还要注意一下0能不能取到。
没了。
感谢一下这位神犇的代码 https://www.cnblogs.com/kkkkahlua/p/7800932.html
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define LL long long
int n,m,f=;
LL b[]={},c[]={};
inline void init(LL x){
for(int i=;i>;i--){
if(x&c[i]){
if(!b[i]){
for(int j=;j<i;++j)if((x>>(j-))&)x^=b[j];
for(int j=i+;j<=;++j)if((b[j]>>(i-))&)b[j]^=x;
b[i]=x;break;
}
x^=b[i];
if(!x)f=;
}
}
}
inline LL getit(LL x){
LL ans=;
for(int i=;i>;i--){
if(x&c[i]){
ans^=b[i];
}
}
return ans;
}
int main(){
int T,cc=;LL x;
scanf("%d",&T);
while(T-->){
scanf("%d",&n);
c[]=;b[]=;f=;
for(int i=;i<=;i++){b[i]=;c[i]=c[i-]*;}
for(int i=;i<=n;i++){scanf("%lld",&x);init(x);}
int siz=;
for(int i=;i<=;i++){if(b[i]){b[siz]=b[i];++siz;}}--siz;
printf("Case #%d:\n",++cc);
scanf("%d",&m);
LL sz=((long long)<<(siz))-;
for(int j=;j<m;j++){
scanf("%lld",&x);
if(f)--x;
if(x>sz)printf("-1\n");
else printf("%lld\n",getit(x));
}
}
return ;
}
HDU 3949 XOR 线性基的更多相关文章
- HDU 3949 XOR [线性基|高斯消元]
		
目录 题目链接 题解 代码 题目链接 HDU 3949 XOR 题解 hdu3949XOR 搞死消元找到一组线性无关组 消出对角矩阵后 对于k二进制拆分 对于每列只有有一个1的,显然可以用k的二进制数 ...
 - hdu 3949 XOR (线性基)
		
链接: http://acm.hdu.edu.cn/showproblem.php?pid=3949 题意: 给出n个数,从中任意取几个数字异或,求第k小的异或和 思路: 线性基求第k小异或和,因为题 ...
 - hdu 3949 XOR 线性基 第k小异或和
		
题目链接 题意 给定\(n\)个数,对其每一个子集计算异或和,求第\(k\)小的异或和. 思路 先求得线性基. 同上题,转化为求其线性基的子集的第k小异或和. 结论 记\(n\)个数的线性基为向量组\ ...
 - HDU 3949 XOR ——线形基 高斯消元
		
[题目分析] 异或空间的K小值. 高斯消元和动态维护线形基两种方法都试了试. 动态维护更好些,也更快(QAQ,我要高斯消元有何用) 高斯消元可以用来开拓视野. 注意0和-1的情况 [代码] 高斯消元 ...
 - HDU 3949 XOR(高斯消元搞基)
		
HDU 3949 XOR pid=3949" target="_blank" style="">题目链接 题意:给定一些数字,问任取几个异或值第 ...
 - HDU 3949 XOR [高斯消元XOR 线性基]
		
3949冰上走 题意: 给你 N个数,从中取出若干个进行异或运算 , 求最后所有可以得到的异或结果中的第k小值 N个数高斯消元求出线性基后,设秩为$r$,那么总共可以组成$2^r$中数字(本题不能不选 ...
 - HDU 3949 XOR (线性基第k小)题解
		
题意: 给出\(n\)个数,求出子集异或第\(k\)小的值,不存在输出-1. 思路: 先用线性基存所有的子集,然后对线性基每一位进行消元,保证只有\(d[i]\)的\(i\)位存在1,那么这样变成了一 ...
 - ACM学习历程—HDU 3949 XOR(xor高斯消元)
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 题目大意是给n个数,然后随便取几个数求xor和,求第k小的.(重复不计算) 首先想把所有xor的 ...
 - Xor && 线性基练习
		
#include <cstdio> #include <cstring> ; ; int cnt,Ans,b,x,n; inline int Max(int x,int y) ...
 
随机推荐
- 树形dp(B - Computer HDU - 2196 )
			
题目链接:https://cn.vjudge.net/contest/277955#problem/B 题目大意:首先输入n代表有n个电脑,然后再输入n-1行,每一行输入两个数,t1,t2.代表第(i ...
 - webSQL 增删改查
			
webSQL 增删改查 转载于:https://www.cnblogs.com/liuhao-web/p/7866032.html /** *数据库操作辅助类,定义对象.数据操作方法都在这里定义 * ...
 - 莫烦课程Batch Normalization 批标准化
			
for i in range(N_HIDDEN): # build hidden layers and BN layers input_size = 1 if i == 0 else 10 fc = ...
 - 39 - 同步-异步-IO多路复用
			
目录 1 同步与异步 2 阻塞与非阻塞 3 什么是IO 3.1 内核态用户态 3.2 IO两个阶段 3.3 IO模型 3.3.1 同步阻塞IO 3.3.2 同步非阻塞IO 3.3.3 IO多路复用 3 ...
 - Linux嵌入式交叉编译环境 的搭建【转】
			
转自:http://blog.csdn.net/woaixiaozhe/article/details/7395435 1. 安装标准的C开发环境,由于Linux安装默认是不安装的,所以需要先安装一下 ...
 - Git 管理本地代码【转】
			
转自:http://www.cnblogs.com/JessonChan/archive/2011/03/16/1986570.html 以前用SVN,不过没有用出感情来:倒是用出不少怨恨:由于没有很 ...
 - 关于oracle数据库死锁的检查方法
			
一.数据库死锁的现象程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错. 二.死锁的原理当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提交,另一条对于这一列数据做 ...
 - HDU 6199 2017沈阳网络赛 DP
			
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6199 题意:n堆石子,Alice和Bob来做游戏,一个人选择取K堆那么另外一个人就必须取k堆或者k+1 ...
 - docker 部署 portainer(http)
			
=============================================== 2019/4/30_第6次修改 ccb_warlock 更新 ...
 - 多线程 or I/O复用select/epoll
			
1:多线程模型适用于处理短连接,且连接的打开关闭非常频繁的情形,但不适合处理长连接.线程模型默认情况下,在Linux下每个线程会开8M的栈空间,在TCP长连接的情况下,以2000/分钟的请求为例,几乎 ...