[hdu3949]XOR(线性基求xor第k小)
题目大意:求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小)的更多相关文章
- HDU3949 XOR (线性基)
HDU3949 XOR Problem Description XOR is a kind of bit operator, we define that as follow: for two bin ...
- hdu3949(线性基,求第k小的异或和
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 XOR Time Limit: 2000/1000 MS (Java/Others) Me ...
- Xor && 线性基练习
#include <cstdio> #include <cstring> ; ; int cnt,Ans,b,x,n; inline int Max(int x,int y) ...
- hdu 3949 XOR (线性基)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=3949 题意: 给出n个数,从中任意取几个数字异或,求第k小的异或和 思路: 线性基求第k小异或和,因为题 ...
- 线性基求交(2019牛客国庆集训派对day4)
题意:https://ac.nowcoder.com/acm/contest/1109/C 问你有几个x满足A,B集合都能XOR出x. 思路: 就是线性基求交后,有几个基就是2^几次方. #defin ...
- HDU3949 XOR(线性基第k小)
Problem Description XOR is a kind of bit operator, we define that as follow: for two binary base num ...
- hdu 3949 XOR 线性基 第k小异或和
题目链接 题意 给定\(n\)个数,对其每一个子集计算异或和,求第\(k\)小的异或和. 思路 先求得线性基. 同上题,转化为求其线性基的子集的第k小异或和. 结论 记\(n\)个数的线性基为向量组\ ...
- 线性基求交(线段树)--牛客第四场(xor)
题意: 给你n个基,q个询问,每个询问问你能不能 l~r 的所有基都能表示 x . 思路: 建一颗线性基的线段树,up就是求交的过程,按照线段树区间查询的方法进行check就可以了. #define ...
- 2019牛客多校第四场B xor(线性基求交)题解
题意: 传送门 给\(n\)个集合,每个集合有一些数.给出\(m\)个询问,再给出\(l\)和\(r\)和一个数\(v\),问你任意的\(i \in[l,r]\)的集合,能不能找出子集异或为\(v\) ...
随机推荐
- Node的异步I/O
node是单线程非阻塞异步I/O的模式. 阻塞I/O:完成整个数据获取的过程: 非阻塞I/O:不带数据,直接立即返回,要获取数据,还需通过文件描述符再次读取. node完成整个异步I/O的有事件循环. ...
- vs2012 sln和.vcxproj有什么区别
sln是解决方案的配置,主要是管理这个方案里的多个vcxprojvcxproj是工程的配置文件,管理工程中细节比如包含的文件,引用库等一般没有sln,也可以直接打开vcxproj,也可以重新生成sln ...
- 打印iphone支持的所有字体
//打印iphone支持的所有字体 NSArray *familyNames = [UIFont familyNames]; for(NSString *familyName in familyNam ...
- ugui在运行时改变RectTransform的大小
http://blog.csdn.net/BeiFuDeNvWang/article/details/50838266 在代码中动态改变RectTransform大小的方法如下所示: 1:直接对siz ...
- 【转】深入剖析Java中的装箱和拆箱
深入剖析Java中的装箱和拆箱 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱 ...
- Java 时间工具类
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 1.Calendar 转化 String ...
- Nagios 里面监控MySQL事务一直RUNNING没有结束的报警Shell脚本 (转)
序言: 业务报警订单提交异常,页面一直没有反应,排查后是事务没有提交或者回滚导致,想到如果及时监控事务的运行状态报警出来,那么就可以及时排查出问题所在,方便运营处理,所以自己就弄了一个s ...
- iOS 【资源篇】
iOS9开发入门教程索引 Objective-C视频教程 O-c Blog 社区 畅游 http://www.9ria.com/ 苹果中文开发社区 http://www.cocoachina.co ...
- Spring Boot自定义配置与加载
Spring Boot自定义配置与加载 application.properties主要用来配置数据库连接.日志相关配置等.除了这些配置内容之外,还可以自定义一些配置项,如: my.config.ms ...
- canvas图像以及剪切
图像篇: 代码: 1 /** 2 * Created by Administrator on 2016/1/28. 3 */ 4 function draw (id){ 5 var canvas = ...