[模板]线性基
2017-07-22 09:50
92 查看
模板第四弹
难度较大,请勿弃疗给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。 n<=50
Sample Input 3 3 2 1 Sample Output 3
看上去莫名其妙地想贪心。。。
给些定义:
S为无符号整数集
即S∈N∗
异或和
记为Xor−Sum(S)Xor−Sum(S)=S1⊕S2⊕....⊕S|S|
张成
记为span(S)对于所有T∈S,有Xor−Sum(T)∈span(S)
就是所有子集异或和的集合
前方高能!!!
线性相关
S若有元素Sj,使S去掉Sj后的集合S′满足Sj∈span(S′)
则称S线性相关,否则称S线性无关
前方高能!!!*2+重点!!!
线性基
若B为S的线性基B满足
1. B∈S,S∈span(B)
2. B线性无关
线性基的长度为|B|
前方高能!!!*3+重点!!!*2
构造与性质
我们设Smax为S中最大的元素设Len=log2(Smax)
我们可用一个数组g[Len]的数组存储线性基
对于每个i,gi只有两种可能:
1. gi=0
所有j使i<j,gj第i位∈{0,1}
2. gi≠0
所有j使j≠i gj第i位=0
所有j使i<j gi第j位=0
所有j使i>j gi第j位∈{0,1}
假设插入数位x
流程参考代码
void insert(ll x) { fd(i,len-1,0) if(x&(1ll<<i)) if(g[i]) x^=g[i]; else { fr(j,0,i-1) if(x&(1ll<<j)) x^=g[j]; fr(j,i+1,len-1) if(g[j]&(1ll<<i)) g[j]^=x; g[i]=x; return ; } }
开始的问题
看了代码,你也许会大呼简单前面当然要加上插入啊
ll ans=0; fr(i,0,len-1) ans^=g[i];
相关文章推荐
- 高斯消元&线性基模板
- [洛谷3812]【模板】线性基
- [模板] 线性基
- 模板【洛谷P3812】 【模板】线性基
- sgu275 线性基模板题
- 线性基 模板 bzoj2460 【BeiJing2011】 元素
- 洛谷3812:【模板】线性基——题解
- JS模板引擎 :ArtTemplate (2)
- HDU2222 Keywords Search [AC自动机模板]
- 大数相乘(大数阶乘模板)
- ASP应用之模板采用
- 两个词形容模板:另类 高效
- 深入学习spring-boot系列(三)--使用thymeleaf模板
- Asscess 通过DataTable写入数据到Excel现有模板 ,流文件导出
- 第三章:Django的模板使用
- HDU 6172 Array Challenge 【线性递推式模板】
- 字典树 模板+详解
- hdu 3065 病毒侵袭持续中 AC自动机模板题 ,,一A。
- 洛谷P3371-【模板】单源最短路【SPFA】
- JS模板引擎 :ArtTemplate