P3812 模板线性基(求最大值)
Posted zhangbuang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P3812 模板线性基(求最大值)相关的知识,希望对你有一定的参考价值。
题目背景
这是一道模板题。
题目描述
给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。
输入输出格式
输入格式:第一行一个数n,表示元素个数
接下来一行n个数
输出格式:仅一行,表示答案。
输入输出样例
说明
1≤n≤50,0≤Si≤250 1 \leq n \leq 50, 0 \leq S_i \leq 2 ^ 50 1≤n≤50,0≤Si?≤250
CODE:
1 #include <bits/stdc++.h> 2 #define N 51 3 #define ll long long 4 using namespace std; 5 6 int n; 7 ll ans; 8 ll a[N], p[101]; 9 10 inline ll read() 11 12 char ch = getchar(); 13 ll x = 0, f = 1; 14 while(ch > ‘9‘ || ch < ‘0‘) 15 16 if(ch == ‘-‘) 17 f = -1; 18 ch = getchar(); 19 20 while(ch >= ‘0‘ && ch <= ‘9‘) 21 22 x = x * 10 + ch - ‘0‘; 23 ch = getchar(); 24 25 return x * f; 26 27 28 void Get_LB(ll x) 29 30 for(int i = 62; i >= 0; i--) 31 32 if(!(x >> (ll)i)) 33 continue; 34 if(!p[i]) 35 36 p[i] = x; 37 break; 38 39 x ^= p[i]; 40 41 42 43 int main() 44 45 n = read(); 46 for(int i = 1; i <= n; i++) 47 Get_LB(a[i] = read()); 48 /// for(int i=0;i<=62;i++)cout<<p[i]<<" ";cout<<endl; 49 for(int i = 62; i >= 0; i--) 50 if((ans ^ p[i]) > ans) 51 ans ^= p[i]; 52 cout << ans; 53 return 0; 54 55
以上是关于P3812 模板线性基(求最大值)的主要内容,如果未能解决你的问题,请参考以下文章