HDU 3949 XOR [高斯消元XOR 线性基]
题意:
给你 N个数,从中取出若干个进行异或运算 , 求最
后所有可以得到的异或结果中的第k小值
N个数高斯消元求出线性基后,设秩为$r$,那么总共可以组成$2^r$中数字(本题不能不选,所以$2^r -1$)
然后如果$k \ge 2^r$就不存在啦
否则一定可以有$k$小,因为现在$1..r$行每行都有一位是1(左面是最高位)
从高到低枚举k的二进制,如果是1就异或上对应的行就行了,最后就是k小值啦
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <bitset>
using namespace std;
typedef long long ll;
const int N=1e4+,INF=1e9;
inline ll read(){
char c=getchar();ll x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,Q;
ll a[N],k,bin[N];
void ini(){
bin[]=;for(int i=;i<=;i++) bin[i]=bin[i-]<<;
}
int now;
void Gauss(){
now=;
for(int i=;i>=;i--){
int j=now;
while(j<=n&&!(a[j]&bin[i])) j++;
if(j==n+) continue;
if(j!=now) swap(a[j],a[now]);
for(int k=;k<=n;k++)
if(k!=now&&(a[k]&bin[i])) a[k]^=a[now];
now++;
}
now--;
}
ll Query(ll k){//printf("Q %lld\n",k);
ll ans=;
if(now!=n) k--;
if(k>=bin[now]) return -;
for(int i=;i<=now;i++)
if(k&bin[now-i]) ans^=a[i];
return ans;
}
int main(){
freopen("in","r",stdin);
ini();
int T=read(),cas=;
while(T--){printf("Case #%d:\n",++cas);
n=read();
for(int i=;i<=n;i++) a[i]=read();
Gauss();
Q=read();
while(Q--) printf("%lld\n",Query(read()));
}
}
HDU 3949 XOR [高斯消元XOR 线性基]的更多相关文章
- 【bzoj4269】再见Xor 高斯消元求线性基
题目描述 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. 输入 第一行一个正整数N. 接下来一行N个非负整数. 输出 一行,包含两 ...
- HDU3949/AcWing210 XOR (高斯消元求线性基)
求第k小的异或和,用高斯消元求更简单一些. 1 //用高斯消元求线性基 2 #include<bits/stdc++.h> 3 using namespace std; 4 #define ...
- 【BZOJ2115】[Wc2011] Xor 高斯消元求线性基+DFS
[BZOJ2115][Wc2011] Xor Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ...
- BZOJ4269再见Xor——高斯消元解线性基
题目描述 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. 输入 第一行一个正整数N. 接下来一行N个非负整数. 输出 一行,包含两 ...
- 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基
题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...
- 【bzoj3105】[cqoi2013]新Nim游戏 高斯消元求线性基
题目描述 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴,但不能同时从 ...
- 【bzoj4004】[JLOI2015]装备购买 贪心+高斯消元求线性基
题目描述 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 <= j < ...
- 【BZOJ2322】[BeiJing2011]梦想封印 高斯消元求线性基+DFS+set
[BZOJ2322][BeiJing2011]梦想封印 Description 渐渐地,Magic Land上的人们对那座岛屿上的各种现象有了深入的了解. 为了分析一种奇特的称为梦想封印(Fantas ...
- 【BZOJ2844】albus就是要第一个出场 高斯消元求线性基
[BZOJ2844]albus就是要第一个出场 Description 已知一个长度为n的正整数序列A(下标从1开始), 令 S = { x | 1 <= x <= n }, S 的幂集2 ...
随机推荐
- ucosii --任务就绪表
任务就绪表的任务就是高效的找出当前优先级最高的就绪任务. 由任务就绪表OSRdyTbl和任务就绪组OSRdyGrb组成,OSRdyTbl每一个位都记录着一个任务的就绪状态, 0非就绪1就绪,OSRdy ...
- linphone-android-客户端APP-工程解读
LinphoneLauncherActivity 是APP的入口组件,在这个组件里,它会启动LinphoneService这个后台服务,然后不断地判断这个后台服务是否已经启动完毕,如果已经启动完毕后, ...
- python+appium+unittest
一个流行语言,一个主流工具,一个实用框架: For android 实例如下: import unittest from appium import webdriver from time impor ...
- Oracle_where子句
Oracle_where子句 --1.查询员工名为'SMITH'的信息 select * from emp where ename = 'SMITH'; --2.查询在1980/12/17入职的员 ...
- JSP学习总结
1. 为什么需要jsp? Servlet对于逻辑处理是非常方便的,但是对于页面的展现是非常麻烦的.JSP的诞生是为了解决Servlet页面展现麻烦的问题的. 2. JSP的特点: Jsp页面 ...
- JavaScript语法基础:数组的常用方法详解
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 数组的定义 之前学习的数据类型,只能存储一个值(字符串为一个值).如果我 ...
- 月薪20k以上的高级程序员需要学习哪些技术呢?
课程内容: 源码分析.分布式架构.微服务架构.性能优化.团队协作效率.双十一项目实战 适用对象: 1-5年或更长软件开发经验,没有工作经验但基础非常扎实,对java工作机制,常用设计思想,常用java ...
- asp.net -mvc框架复习(8)-实现用户登录模型部分的编写
1.配置文件添加数据库连接字符串(web.config) 2.编写通用数据库访问类 (1)引入命名空间 using System.Configuration; (2) 定义连接字符串 (3)编写完成 ...
- 【笔记】BFC 模型知识整理
网上看了很多 BFC 的概念,发现都说得不是很完整和深入,刚好最近看了一些视频教程说到了 BFC 概念所以记录一下. BFC 的概念: BFC 全称:Block format context 块级格式 ...
- 《Java编程的逻辑》终于上市了!
2018年1月下旬,<Java编程的逻辑>终于出版上市了! 这是老马过去两年死磕到底.无数心血的结晶啊! 感谢"博客园"的广大读者们,你们对老马文章的极高评价.溢美之词 ...