博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU3949 XOR
阅读量:4953 次
发布时间:2019-06-11

本文共 2198 字,大约阅读时间需要 7 分钟。

线性基模板

线性基可以看成把一组序列处理过后得到的新数组,他和原序列异或和的值域完全相同,也就是说原序列的任意几个数的异或和都可以被线性基的数表示出来,因此线性基可以看成数原序列的替代。

我们通过特殊的方法处理出线性基,可以快速求出原序列中异或和最大的子集,以及第k小的子集。

存一下自己的板子

#include 
#define INF 0x3f3f3f3f#define full(a, b) memset(a, b, sizeof a)#define FAST_IO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)using namespace std;typedef long long LL;inline int lowbit(int x){ return x & (-x); }inline int read(){ int ret = 0, w = 0; char ch = 0; while(!isdigit(ch)){ w |= ch == '-', ch = getchar(); } while(isdigit(ch)){ ret = (ret << 3) + (ret << 1) + (ch ^ 48); ch = getchar(); } return w ? -ret : ret;}inline int lcm(int a, int b){ return a / __gcd(a, b) * b; }template
inline A fpow(A x, B p, C lyd){ A ans = 1; for(; p; p >>= 1, x = 1LL * x * x % lyd)if(p & 1)ans = 1LL * x * ans % lyd; return ans;}const int N = 20005;int _, n, m, cnt, k, cs;LL val, b[N], a[N];void insert(LL x){ for(int i = 62; i >= 0; i --){ if(x & (1LL << i)){ if(!b[i]){ b[i] = x; break; } else x ^= b[i]; } }}LL maximum(){ LL ret = 0; for(int i = 62; i >= 0; i --){ if((ret ^ b[i]) > ret) ret ^= b[i]; } return ret;}LL minimum(){ for(int i = 0; i<= 62; i ++){ if(b[i]) return b[i]; }}void rebuild(){ full(a, 0), cnt = 0; for(int i = 62; i >= 0; i --){ for(int j = i - 1; j >= 0; j --) if(b[i] & (1LL << j)) b[i] ^= b[j]; } for(int i = 0; i <= 62; i ++){ if(b[i]) a[cnt++] = b[i]; }}LL query(int k){ if(k >= (1LL << cnt)) return -1; LL ret = 0; for(int i = 62; i >= 0; i --){ if(k & (1LL << i)) ret ^= a[i]; } return ret;}int main(){ for(scanf("%d", &_); _; _ --){ full(b, 0); scanf("%d", &n); for(int i = 1; i <= n; i ++){ scanf("%lld", &val); insert(val); } rebuild(); scanf("%d", &m); printf("Case #%d:\n", ++cs); while(m --){ scanf("%d", &k); if(n != cnt) k --; printf("%lld\n", query(k)); } } return 0;}

转载于:https://www.cnblogs.com/onionQAQ/p/11230807.html

你可能感兴趣的文章
表格里使用text-overflow后不能隐藏超出的文本的解决方法
查看>>
[UE4]事件处理(Handling Events)和委托(Delegate)代码示例(一)
查看>>
读《java核心技术卷一》有感
查看>>
Mac上Markdown的使用
查看>>
选修所有课程的学生信息
查看>>
输出斐波纳契数列
查看>>
git
查看>>
JS数组定义【收藏】
查看>>
2015个人年度总结
查看>>
ios copy
查看>>
SQLServer 2008的数据库镜像实施笔记(转)
查看>>
第四次 博客作业
查看>>
pymysql 读取数据库没有字段
查看>>
【nginx】关于gzip压缩
查看>>
Spring Boot 邮件发送的 5 种姿势!
查看>>
ZOJ.3551.Bloodsucker(期望DP)
查看>>
BZOJ.3261.最大异或和(可持久化Trie)
查看>>
IMU数据积分获得当前位姿
查看>>
logging 日志模块 configparser 配置文件
查看>>
广播接收者案例_开机启动
查看>>