P3812 模板线性基(求最大值)

Posted zhangbuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P3812 模板线性基(求最大值)相关的知识,希望对你有一定的参考价值。

题目背景

这是一道模板题。

题目描述

给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。

输入输出格式

输入格式:

第一行一个数n,表示元素个数

接下来一行n个数

输出格式:

仅一行,表示答案。

输入输出样例

输入样例#1: 复制
2
1 1
输出样例#1: 复制
1

说明

1≤n≤50,0≤Si≤250 1 \leq n \leq 50, 0 \leq S_i \leq 2 ^ 50 1n50,0Si?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 模板线性基(求最大值)的主要内容,如果未能解决你的问题,请参考以下文章

P3812 模板线性基

luogu P3812 模板线性基

P3812 模板线性基

Luogu P3812 模板线性基

线性基

[洛谷3812]模板线性基