P3812 【模板】线性基
2019-07-23 12:12
76 查看
题目链接
线性基可以解决的问题:给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。
然后这道题也是一道模板题了。
什么是线性基呢?就是一个去求解异或和最值的问题,为什么可以求异或和最大呢,这里需要用到了异或的性质了。
a ^ b = c则有a ^ c = b以及a ^ b = c。
所以我们距离9、10、12、11这三个按序输入的数值,我们求取其中几个元素的异或值最大。
我们用p[ ]来存首字符的问题。p[3]、p[2]、p[1]、p[0]分别代表的是8、4、2、1这几位上如果要放上去值的时候对应的值(已经异或前面的所有的元素所得到的)。
p[3] = 9,是因为9是"1001"那么第3位就是1;
p[1] = 3,因为我们把10处理进来时候,10会先异或前面的9,变成3,然后(3>>2 == 0),所以p[1] = 3;
p[2] = 5,把12丢进去的时候,12会异或前面的p[3]变成了5,然后(5>>2 == 1)是存在的,故是p[2] = 5;
p[0] = 4,把11丢进去,会先后异或9、5、3最后得到的就是4了,那么是不是就是11异或完前面所有的元素的值了。
然后我们要是想去这段区间的最大值,是不是就是我们先把第一个9取了,然后发现9^5 = 12也就是12了,更新答案为12,然后12^3 = 15,更新答案为15,15 ^ 4 = 11,没有比之前更大,我们以此类推是不是就可以把完整的给求出来了。
[code]#include <iostream> #include <cstdio> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <limits> #include <vector> #include <stack> #include <queue> #include <set> #include <map> #define lowbit(x) ( x&(-x) ) #define pi 3.141592653589793 #define e 2.718281828459045 #define efs 1e-6 #define INF 0x3f3f3f3f #define HalF (l + r)>>1 #define lsn rt<<1 #define rsn rt<<1|1 #define Lson lsn, l, mid #define Rson rsn, mid+1, r #define QL Lson, ql, qr #define QR Rson, ql, qr #define myself rt, l, r #define MAX_3(a, b, c) max(max(a, b), c) using namespace std; typedef unsigned long long ull; typedef long long ll; const int maxN = 55; int N; ll a[maxN], p[maxN]; inline void LB(ll x) { for(int i=50; i>=0; i--) { if( !( x >> (ll)i ) ) continue; if(!p[i]) { p[i] = x; return; } x ^= p[i]; } } inline void init() { memset(p, 0, sizeof(p)); } int main() { scanf("%d", &N); init(); for(int i=1; i<=N; i++) { scanf("%lld", &a[i]); LB(a[i]); } ll ans = 0; for(int i=50; i>=0; i--) { if((ans ^ p[i]) > ans) ans = ans ^ p[i]; } printf("%lld\n", ans); return 0; }
相关文章推荐
- [模板] 线性基
- 洛谷P3812 【模板】(线性基模板题)同样可解SGU 275
- [模板]线性基
- 模板【洛谷P3812】 【模板】线性基
- sgu275 线性基模板题
- 洛谷3812:【模板】线性基——题解
- 高斯消元&线性基模板
- [洛谷3812]【模板】线性基
- 线性基 模板 bzoj2460 【BeiJing2011】 元素
- C++实现委托和消息反馈模板
- Discuz 模板标签说明
- poj2388 快速排序 模板题
- 模板-计算几何
- LCT模板
- [模板]KMP算法
- Laravel Blade模板引擎 for thinkphp5
- Maven项目模板
- Xcode中的变量模板(variable template)的用法
- 最短路之SPFA模板